[RenPy] 纯文本查看 复制代码
init python:
import math
#一个根据鼠标位置旋转的组件
class Appearing(renpy.Displayable):
def __init__(self, child,**kwargs):
# 向renpy.Displayable构造器传入额外的特性(property)。
super(Appearing, self).__init__(**kwargs)
# 子组件。
#图片位置
self.xpos,self.ypos = 10,10
#鼠标位置
self.x,self.y=0,0
self.child = renpy.displayable(child)
self.repulsor_pos=(0,0)
self.rotate = 0
def render(self, width, height, st, at):
# 创建一个变换(transform),调整子组件的rotate。
t = Transform(child=self.child,rotate=self.rotate)
# 创建一个子组件的渲染器。
child_render = renpy.render(t, width, height, st, at)
# 或者子组件尺寸。
self.width, self.height = child_render.get_size()
# 创建返回的渲染器。
render = renpy.Render(self.width, self.height)
# 以blit方式将子组件的渲染器信息复制我们的渲染器。
#render.blit(child_render, (0, 0))
dx=self.x-self.xpos
dy=self.y-self.ypos
dl=math.hypot(dx,dy)
if dl >30 and dl <50:
#离得比较近,啥也不做,在原来的地点刷新即可
render.place(t,self.xpos,self.ypos,100,100)
else:
distance=(40-dl)/50
self.xpos-=distance*dx/dl
self.ypos-=distance*dy/dl
render.place(t,self.xpos,self.ypos,100,100)
# 返回渲染器。
return render
def event(self, ev, x, y, st):
if (x,y) is None:
return None
self.rotate=math.degrees(math.atan2(self.y-self.ypos-60,self.x-self.xpos-60))+180
self.x=x
self.y=y
renpy.redraw(self, 0)
# 将事件传给各子组件。
return self.child.event(ev, x, y, st)
def visit(self):
return [ self.child ]