Project1

标题: 请教如何让精灵支持rotate方法? [打印本页]

作者: 文雅夕露    时间: 2018-3-25 11:41
标题: 请教如何让精灵支持rotate方法?
本帖最后由 文雅夕露 于 2018-3-25 12:33 编辑

自己摸索了许多还是没明白呢...
我是仿Game_Picture里的脚本进行仿写。
但是效果就是实现不了。调用不起来。
RUBY 代码复制
  1. class Sprite
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对象
  4.   #--------------------------------------------------------------------------
  5.   alias angle_initialize initialize
  6.    def initialize(viewport = nil)
  7.    angle_initialize
  8.    init_rotate
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ● 初始化旋转角度和速度
  12.   #--------------------------------------------------------------------------
  13.   def init_rotate
  14.     self.angle = 0
  15.     @rotate_speed = 0
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 更改旋转速度
  19.   #--------------------------------------------------------------------------
  20.   def rotate(speed)
  21.     @rotate_speed = speed
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 更新旋转
  25.   #--------------------------------------------------------------------------
  26.   def update_rotate
  27.     return if @rotate_speed == 0
  28.     self.angle += @rotate_speed / 2.0
  29.     self.angle += 360 while self.angle < 0
  30.     self.angle %= 360
  31.   end
  32. end
  33.  
  34. class Scene_Anglepictrue < Scene_MenuBase
  35.   #--------------------------------------------------------------------------
  36.   # ● 初始化对像
  37.   #--------------------------------------------------------------------------
  38.   def initialize
  39.    @speed = 0
  40.    @last_time = 750
  41. end
  42.   #--------------------------------------------------------------------------
  43.   # ● 开始处理
  44.   #--------------------------------------------------------------------------
  45.   def start
  46.   super
  47.   #生成各种图像精灵#
  48.   @anglepictrue = Sprite.new
  49.   @anglepictrue.bitmap = Cache.picture("转盘")
  50.   @anglepictrue.x = 272
  51.   @anglepictrue.y = 208
  52.   @anglepictrue.z = 99
  53.   @anglepictrue.ox = @anglepictrue.bitmap.width / 2
  54.   @anglepictrue.oy = @anglepictrue.bitmap.height / 2
  55.   @cut = Sprite.new
  56.   @cut.bitmap = Cache.picture("转盘指针")
  57.   @cut.z = 999
  58.   @cut.x = 272
  59.   @cut.y = 208
  60.   @cut.ox = @cut.bitmap.width / 2
  61.   @cut.oy = @cut.bitmap.height / 2
  62. end
  63.   #--------------------------------------------------------------------------
  64.   # ●刷新
  65.   #--------------------------------------------------------------------------
  66.   def update
  67.     super
  68.     anglepic
  69.     #@cut.rotate(@speed)
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ●旋转过程
  73.   #--------------------------------------------------------------------------
  74.   def anglepic
  75.     loop do
  76.       @cut.rotate(@speed)
  77.       @speed -= 1 if @speed > -50 && @last_time > 0
  78.       @speed += 1 if @speed < 0 && @last_time == 0 && ![0,90,180,270].include?(@cut.angle.round)
  79.       @last_time = 0 if Input.press?(:C) && @speed == -50
  80.       if @speed == 0
  81.         break
  82.       end
  83.     end
  84.     go_event
  85.     dispose_pictrue
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ●执行公共事件
  89.   #--------------------------------------------------------------------------
  90. def go_event
  91.     case @cut.angle.round
  92.     when 1..89
  93.     $game_temp.common_event_id = 31
  94.     when 91..179
  95.     $game_temp.common_event_id = 32
  96.     when 181..269
  97.     $game_temp.common_event_id = 33
  98.     when 271..359
  99.     $game_temp.common_event_id = 34
  100.   end
  101. end
  102.   #--------------------------------------------------------------------------
  103.   # ●消除图片
  104.   #--------------------------------------------------------------------------
  105.   def dispose_pictrue
  106.   @anglepictrue.dispose
  107.   @cut.dispose
  108.   end
  109. end


请教该怎么编写才是正确的呢?
作者: 喵呜喵5    时间: 2018-3-25 12:11
@Angle –> self.angle
作者: 文雅夕露    时间: 2018-3-25 12:35
喵呜喵5 发表于 2018-3-25 12:11
@Angle –> self.angle

谢谢喵前辈的回答。
嗯...已经按照您的提示修改了。
但在脚本里调用不起来,不知是脚本逻辑出了什么问题...
已经更新了主楼的脚本内容。
作者: 喵呜喵5    时间: 2018-3-25 14:47
文雅夕露 发表于 2018-3-25 12:35
谢谢喵前辈的回答。
嗯...已经按照您的提示修改了。
但在脚本里调用不起来,不知是脚本逻辑出了什么问题. ...

loop do 的用途是什么?
作者: shitake    时间: 2018-3-25 16:07
游戏一般是有自己的主循环的【每个类里的update函数就是
你自己写loop这种只会阻塞游戏自己的主循环
作者: 喵呜喵5    时间: 2018-3-25 16:47
喵呜喵5 发表于 2018-3-25 14:47
loop do 的用途是什么?

先不要考虑图像旋转了,你先试着写写图像从屏幕左上角移动到右下角再从右下角移动回左下角试试吧
作者: 文雅夕露    时间: 2018-3-25 18:26
自行摸索出结果了。已经实现相应的效果,感谢前辈的指导。




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