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

Project1

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

[已经过期] 请问:要让窗口坐标移动一定的距离后静止,怎么做?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4169
在线时间
258 小时
注册时间
2013-10-13
帖子
815
跳转到指定楼层
1
发表于 2021-3-17 23:07:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
请问:要让窗口坐标移动一定的距离后静止,怎么做?

    #生成标题窗口
    @command_window = Window_Command.new(96,["新游戏","继续","退出"])
    @command_window.x = 320 - @command_window.width/2
    @command_window.y = 288
    loop do
      @command_window.y += 10
      if @command_window.y == 300
         @command_window.y = 300
      end
       Graphics.update
    end
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
我写了上面的程序,结果窗口坐标一直往下移动,没法在300的地方静止下来。

Lv5.捕梦者

梦石
0
星屑
36382
在线时间
10788 小时
注册时间
2009-3-15
帖子
4813
2
发表于 2021-3-17 23:16:53 | 只看该作者
本帖最后由 soulsaga 于 2021-3-18 01:04 编辑

@command_window.y = 288

一直+10有什么可能会是300

IF用>300才对..

況且就算能到300 300后+10就不符合300了...也会一直往下移

评分

参与人数 1+1 收起 理由
alexncf125 + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
26254
在线时间
5354 小时
注册时间
2016-3-8
帖子
1655
3
发表于 2021-3-17 23:19:01 | 只看该作者
if @command_window.y == 300
  @command_window.y = 300
end
你看你这写的什么

loop do 不帶 break 你想 loop 到什么时候
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

4
发表于 2021-3-18 01:18:44 | 只看该作者
y没法刚好等于300,所以就一直+10了
另外,循环也没准备退出条件,会一直卡在这。

初级一点的方法,手动写y增加的逻辑。
window.y = [window.y + 10, 300].min
可以用这个来确保window的y一边增加,又不超过最大值
后面再判断window.y == 300,然后记得要break

推销:日历的RGSS3入门教程 - 精灵与位图Lv3 精灵更新与状态机
窗口可以看作封装过的精灵,在坐标这个问题上行为是一致的。

高级一点的方法,找一个缓动库(Easer),给Sprite加一个ease方法
最基础的线性移动、还有其他效果,直接交给精灵更新来托管,可以避免在业务代码中写一堆if和加减

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
5
发表于 2021-3-18 19:02:15 | 只看该作者
用楼主的代码
  1.     #生成标题窗口
  2.     @command_window = Window_Command.new(96,["新游戏","继续","退出"])
  3.     @command_window.x = 320 - @command_window.width/2
  4.     @command_window.y = 288
  5.     Graphics.transition
  6.     loop do
  7.       if @command_window.y != 300
  8.         @command_window.y += ((300 - @command_window.y)<=>0) *
  9.           [Math.sqrt((@command_window.y - 300).abs).to_i, 1].max
  10.       end
  11.       Graphics.update
  12.       Input.update
  13.       update
  14.       if $scene != self
  15.         break
  16.       end
  17.     end
  18.     Graphics.freeze
复制代码

点评

Integer#<=> 主要是判断运动方向(上下),后面每次刷新位移距离差的算数平方根的整数 +=((300-@command_window.y)<=>0)*Integer(Math.sqrt((@command_window.y-300).abs))   发表于 2021-3-19 17:37
代码看不懂  发表于 2021-3-19 15:20
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 13:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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