赞 | 0 |
VIP | 13 |
好人卡 | 13 |
积分 | 1 |
经验 | 7273 |
最后登录 | 2014-2-17 |
在线时间 | 37 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 37 小时
- 注册时间
- 2012-7-30
- 帖子
- 147
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
想让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
复制代码 |
|