设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 5016|回复: 4
打印 上一主题 下一主题

[通用发布] Sprite&Window Move To - 精灵类和窗口类的移动方法

[复制链接]

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

跳转到指定楼层
1
发表于 2011-5-21 12:11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 忧雪の伤 于 2011-5-21 17:50 编辑

Sprite&Window

方法

    move_to(x, y, duration)
         开始移动,x 是移动到的 X 座标,y 是移动到的 Y 座标,duration 是移动的帧数。
         需要移动的情况下必须调用 update 方法。

例子:
  1. sprite = [Sprite.new, Sprite.new]
  2. sprite[0].move_to(10, 10, 10);  sprite[1].move_to(10, 10, 10)
  3. Graphics.wait(10){sprite[0].update;  sprite[1].update}
  4. print sprite[0].x,  sprite[0].y # => 10, 10
  5. print sprite[1].x,  sprite[1].y # => 10, 10
复制代码
* Graphics.wait 请参考 RGSS2 的帮助。

定义
  1. #==============================================================================
  2. # ** Graphics
  3. #==============================================================================

  4. module Graphics
  5.   #--------------------------------------------------------------------------
  6.   # * Wait
  7.   #--------------------------------------------------------------------------
  8.   unless method_defined?("wait");  def self.wait(duration)
  9.   duration.times{update; yield if defined? yield};  end;  end
  10. end

  11. #==============================================================================
  12. # ** Sprite
  13. #==============================================================================

  14. class Sprite
  15.   alias move_system_update update unless method_defined?("move_system_update")
  16.   #--------------------------------------------------------------------------
  17.   # * Move To
  18.   #--------------------------------------------------------------------------
  19.   def move_to(*args)
  20.     args[0] = args[0].round if args[0].is_a?(Float)
  21.     args[1] = args[1].round if args[1].is_a?(Float)
  22.     @move_system = [args, args[0] - self.x, args[1] - self.y, 0]
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # * Update
  26.   #--------------------------------------------------------------------------
  27.   def update
  28.     move_system_update
  29.     return if @move_system.nil?;  @move_system[3] += 1
  30.     self.x += @move_system[1] / @move_system[0][2]  
  31.     self.y += @move_system[2] / @move_system[0][2]
  32.     return unless @move_system[3] == @move_system[0][2]
  33.     self.x, self.y, @move_system = @move_system[0][0], @move_system[0][1], nil
  34.   end
  35. end

  36. #==============================================================================
  37. # ** Window
  38. #==============================================================================

  39. class Window
  40.   alias move_system_update update unless method_defined?("move_system_update")
  41.   #--------------------------------------------------------------------------
  42.   # * Move To
  43.   #--------------------------------------------------------------------------
  44.   def move_to(*args)
  45.     args[0] = args[0].round if args[0].is_a?(Float)
  46.     args[1] = args[1].round if args[1].is_a?(Float)
  47.     @move_system = [args, args[0] - self.x, args[1] - self.y, 0]
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # * Update
  51.   #--------------------------------------------------------------------------
  52.   def update
  53.     move_system_update
  54.     return if @move_system.nil?;  @move_system[3] += 1
  55.     self.x += @move_system[1] / @move_system[0][2]  
  56.     self.y += @move_system[2] / @move_system[0][2]
  57.     return unless @move_system[3] == @move_system[0][2]
  58.     self.x, self.y, @move_system = @move_system[0][0], @move_system[0][1], nil
  59.   end
  60. end
复制代码

点评

表格是个好东西。  发表于 2011-5-21 17:57
漂亮姐姐球格式的代码  发表于 2011-5-21 17:57

Lv1.梦旅人

梦石
0
星屑
50
在线时间
183 小时
注册时间
2012-9-11
帖子
71
2
发表于 2012-12-3 18:27:10 | 只看该作者
抢沙发
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

3
发表于 2012-12-3 18:44:57 | 只看该作者
……居然是阻塞的= =|
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
704 小时
注册时间
2011-12-27
帖子
941
4
发表于 2012-12-4 22:06:41 手机端发表。 | 只看该作者
哇,剛好想要來做個效果,謝
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
722
在线时间
375 小时
注册时间
2009-3-9
帖子
398
5
发表于 2012-12-14 16:11:16 | 只看该作者
经测试,非常严重的BUG,sprite的起始X坐标是0,终点坐标是10,如果移动的帧数(时间)超过10的话,此脚本无效,也就是说:
在计算坐标移动的方法中,算法不对,这种算法是初级算法,还请楼主仔细想想算法应当怎么改,呵呵。
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 01:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表