But I don't understand the purpose of the first line in update_positions().
self.vels *= 0.8 ** self.dt
What is 0.8, and why is it raised to the power of time elapsed?
In the previous beta, I was able to set the SpriteNode.texture using the image identifier returned from load_pil_image(). E.g. when initializing the SpriteNode:
my_img = Image.open('my_image_file.png') my_sprite = SpriteNode(texture=load_pil_image(my_img), position=(0,0))
And when I set SpriteNode.texture directly, I found I needed to use a Texture object but using load_pil_image() stilll worked, e.g.:
my_sprite.texture = Texture(load_pil_image(my_img))
However, now (with the new beta) I find that neither of the above works. If I attempt either of the above Pythonista just closes. It seems that I need to first convert my image to a ui.Image before setting the SpriteNode.texture.
The documentation for scene.Texture does state that "Textures can be initialized using either the name of a built-in image (a string), or a ui.Image object." No mention here of supporting PIL images. However, as I said I could do this previously... and so I'm wondering if truly the SpriteNode.texture is only meant to be used with ui.Image (or built-in images), and if all PIL images will then need to be converted to ui.Image in order to be used with a SpriteNode.
Or if I'm doing something wrong.
@ccc That is helpful information, thanks.
OK, I didn't even know that ui.ScrollView existed. That is going to come in handy!
I have a question about the right way to go about something, in general terms...
I have a large image (I can scale it to the width of the screen, but it will still be about twice the height of the screen). I would like to show just a part of the image that will fit on the screen, and then be able to scroll through the image to view different parts of it (using buttons or whatever).
But I am unsure of the best way to handle the displaying of the larger-than-screen-size image. I have it working now by creating a layer that is the width of the screen but twice the height of the screen, and then setting this Layer's image property to my image:
im = Image.open("bgnd.png").convert('RGBA') w = int(self.bounds.w) # width of screen h = int(im.size * self.bounds.w / im.size) # scale height keep aspect ratio im = im.resize((w,h)) # scale image to fit screen width; image height > screen height self.im_layer=Layer(Rect(0,0,w,h)) # this layer is larger than screen! self.root_layer.add_layer(self.im_layer) self.im_layer.image = load_pil_image(im)
This seems to work, but it feels wrong...
Is setting a Layer to be larger than the screen size OK to do? What does Pythonista do with the portion of the image that is off screen? Could this be problematic if the image were larger, say 10x the height of the screen? How should this issue -- scrolling through a image larger than the screen -- be handled in applications and on the pythonista platform in particular?