Project1

标题: 怎么让图片的移动做抛物线运动 [打印本页]

作者: 277297575    时间: 2011-6-12 11:12
标题: 怎么让图片的移动做抛物线运动
就是移动图片到一个指定位置,但不是直径过去,而是让他像抛物线那样达到指定位置。类似事件或主角跳跃那样。
作者: 恋百里    时间: 2011-6-12 14:17

用二次函数算出坐标,然后改变精灵的坐标就好了- -好吧
#x^2=2py
Skeleton = Sprite.new
Skeleton.bitmap = Bitmap.new("Graphics/Battlers/Skeleton")
x1=Skeleton.x
y1=Skeleton.y
p=2
loop do
  y1=(x1*x1)/(2*p)
  Skeleton.x=x1
  Skeleton.y=y1
  Graphics.update
  x1+=1
end
- -你看看是这个效果么
作者: 忧雪の伤    时间: 2011-6-12 15:04
  1. def parabola(duration)
  2.   array = []
  3.   duration.downto(0) {|time| array.push(time) }
  4.   1.upto(duration) {|time| array.push(-time) }
  5.   return array
  6. end

  7. time = 15
  8. wave = parabola(time)
  9. sprite = Sprite.new
  10. sprite.bitmap = Bitmap.new(4, 4)
  11. sprite.bitmap.fill_rect(0, 0, 4, 4, Color.new(255, 255, 255))
  12. time.times {|index| Graphics.update; sprite.y = sprite.y + 1;  
  13. sprite.x = sprite.x + wave[index] }  
  14. loop {Graphics.update}
复制代码
我想我失败了。
作者: 冰舞蝶恋    时间: 2011-6-12 15:55
for time in 1..总时间
  图片.x += 1
   图片.y += 1
end

+=和1可以自行改动……
作者: 沙漠点灰    时间: 2011-6-12 16:53
[凑热闹]
抛物线是二次函数...需指定3个坐标,始末只有2个...所以还要指定一个,
送上1个BUG版的,当目标x坐标比目前x坐标小时,不移动...
3个坐标,再利用牛顿插值法对二次函数求解....ls的各位...面向对象,春暖花开....
  1. #==============================================================================
  2. # ■ Math.quadratic
  3. #------------------------------------------------------------------------------
  4. #  数学模块    2次函数
  5. #==============================================================================

  6. def Math.quadratic(x1,x2,x3,y1,y2,y3, &block)
  7.   # 牛顿插值公式
  8.   (x1..x3).each {|x|
  9.     y=(y3*(x-x1)*(x-x2))/((x3-x1)*(x3-x2)+(y2*(x-x1)*(x-x3))/((x2-x1)*(x2-x3)+(y1*(x-x2)*(x-x3))/((x1-x2)*(x1-x3))))
  10.     block.call(x,y)
  11.   }
  12. end
  13. #==============================================================================
  14. # ■ Sprite
  15. #------------------------------------------------------------------------------
  16. #  精灵类       管理图形对象
  17. #==============================================================================

  18. class Sprite
  19.   #--------------------------------------------------------------------------
  20.   # ● 平抛移动
  21.   #--------------------------------------------------------------------------
  22.   def move_to_2(x, y, ox, oy)
  23.     Math.quadratic(self.x,ox,x,self.y,oy,y){|x0|tm=x0.dup
  24.     self.x, self.y =tm
  25.     Graphics.update}
  26.   end
  27. end
  28. temp = Sprite.new
  29. temp.bitmap = Bitmap.new(20,20)
  30. temp.bitmap.fill_rect(0,0,20,20,Color.new(255,0,0))
  31. temp.x = 52;temp.y = 20
  32. temp.move_to_2(640,480,20,20)
复制代码

作者: 冰舞蝶恋    时间: 2011-6-12 22:04
唉,遇到一堆大神了,当咱没说好了…………抱头,悄悄的遁走…………= =||!
作者: px.凤翔九天    时间: 2011-6-12 23:15
这...唉,数学不好啊...慨叹啊......





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1