Project1
标题:
Sprite旋转中心改变
[打印本页]
作者:
devilg
时间:
2013-1-30 09:16
标题:
Sprite旋转中心改变
想让Sprite旋转很好办,指定.angle =就行了
不过旋转的中心不是图片中心,而是在x,y那个地方!
有的时候非常烦人……
那么怎么样能让sprite在中心旋转呢?
原理:通过三角函数勾股定理各种微积分测算中心移位并调整xy使相对中心保持一致。不要被吓跑,初中生水平
=begin 调整后的Sprite
copyleft DevilG, all wrongs reserved
调整:将按照(0,0)旋转调整为按中心旋转
更新x&y使相对中心位置始终相等
不能再使用x+=newx更新位置了,用xplus来帮助更新相对起始点
使用:由于是Sprite的子类与Sprite的使用方法一样
更新位置时使用xplus(increment) 代替.x += increment
=end
class Sprite_Slother < Sprite
PI = 3.14159265358
def x=(x)
if !x.is_a?(Array)
@originalx = x
super(x)
else
super(x[0].to_i)
end
end
def centre(x,y)
@centrex,@centrey = x,y
end
def y=(y)
if !y.is_a?(Array)
@originaly = y
super(y)
else
super(y[0].to_i)
end
end
def angle=(angle)
super(angle)
centre = Math.atan(src_rect.height * 1.0 / src_rect.width) + angle * PI / 180
#this make piggy loop at some centre
lane = ((src_rect.height ** 2 + src_rect.width ** 2)*1.0)**0.5 / 2
centre = PI/2 + Math.atan(src_rect.height * 1.0 / src_rect.width) - angle * PI / 180
#@original
self.x = [@originalx - (Math.sin(centre) * lane - src_rect.width/2)]
self.y = [@originaly + (Math.cos(centre) * lane - src_rect.height/2)]# - @originaly / 2)
#p([self.x+Math.cos(centre) * lane,self.y+Math.sin(centre) * lane])
end
def xplus(x)
self.x = [self.x + x]
@originalx += x
end
def yplus(y)
self.y = [self.y + y]
@originaly += y
end
end
#=end
复制代码
作者:
denitk
时间:
2013-2-8 22:47
这个....
没看懂是什么意思额
作者:
九夜神尊
时间:
2013-2-8 23:22
不过,实际上。
可以移动旋转的中心,
spr.ox = 128
srp.oy=128
这是设置原点的,也就是设置所谓的xy点在图片的什么地方,也就是旋转中心。
鼓励创作。
作者:
骆驼养殖出售
时间:
2013-2-9 09:07
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1