发布于2019-10-31 08:50 阅读(1690) 评论(0) 点赞(23) 收藏(0)
我不完全了解如何正确使用画布处理带有动画的图像。
请参阅随附的代码段,在该代码段中,我将动画图标加载到图像中并同时执行以下操作:(1)add_widget图像(2)创建带有纹理=图像纹理的Rectangle canvas指令
图像动画矩形纹理不
我通读了所有Kivy手册,并通读了Image和Canvas,我发现Image是具有所有此类图像动画处理功能的不错的高级类,而Canvas更像是原始的低级绘图画布。
所以这是我的问题-在Canvas上处理动画的Kivy正确架构是什么?我看过动画,但它看起来更像矩阵动画,例如平移,缩放,旋转。
这就是我现在正在做的事情:我有一个带有大地图窗口的游戏,然后在帮助程序窗口中有一堆游戏UX游戏UX帮助程序窗口我做了所有的奇异布局,并且通常使用图像,所以我的图标动画效果很好。
但是,在游戏地图中,我使用的是画布:
使用以下范例绘制所有游戏对象:
r=Rectangle(texture=some_Image.texture)
map.canvas.add(r)
需要重新绘制世界时:
1) map.canvas.clear()
2)将所有内容绘制到新的位置和状态(为更快,我应该跟踪脏的对象和位置并绘制它们,但老实说,即使每个对象都具有核级,我也得到了出色的fps画)
当然,这比创建和销毁数百个小部件类要快得多,而且重量也要轻得多-对什么画布来说是正确的?
但是问题是我的zip文件中带有动画的图标没有设置动画
问:我认为帆布错了吗?我应该改为为每个游戏对象添加一个图像吗?(并利用所有动画图像支持吗?)
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.image import Image
from kivy.app import App
from kivy.graphics import Rectangle
class MainApp(App):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.root = RelativeLayout()
# use any zip file of an animated image
self.animated_icon = Image(source='factory_icon.zip')
# If I add an Image, the icon animates
self.root.add_widget(self.animated_icon)
# If I add the Image's texture on to a Rectangle instruction, no animation
r = Rectangle(texture=self.animated_icon.texture, size=(100, 100), pos=(100, 100))
self.root.canvas.add(r)
def build(self):
return self.root
if __name__ == '__main__':
MainApp().run()
Image.texture
属性随时间变化。它安排内部方法来随着动画的进行进行更新。此更改不会传播到您的矩形,因为您在更新之间的某个特定时间点使用捕获的纹理值创建了它。考虑以下示例(我为动画使用了一个.gif文件,但原理应相同):
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.image import Image
from kivy.app import App
from kivy.graphics import Rectangle
class MainApp(App):
def __init__(self, **kwargs):
super(MainApp, self).__init__(**kwargs)
self.root = RelativeLayout()
animated_icon = Image(source='test.gif')
animated_icon.bind(texture=self.update_texture)
self.r = Rectangle(texture=animated_icon.texture, size=(500, 255), pos=(100, 100))
self.root.canvas.add(self.r)
def update_texture(self, instance, value):
self.r.texture = value
def build(self):
return self.root
if __name__ == '__main__':
MainApp().run()
在这里,我将自己的update_texture
方法绑定到图像的texture
属性,因此每次更改时,我都可以相应地更新矩形。
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/147951/cf9f7f443fbb5ca38fab/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!