Project1

标题: 求 VX 像素级的人物移动脚本 [打印本页]

作者: 八云紫    时间: 2011-1-8 10:27
标题: 求 VX 像素级的人物移动脚本
本帖最后由 八云紫 于 2011-1-8 12:17 编辑

   求像素级的人物移动脚就是说人物移动什么的都是按照像素为单位移动的。不是原来默认的移动一次 32 像素的。
   要求
      

     ---------------------------------------------------------------------------------------------

    另外5V求 VX 跳跃处理的原理。
    答案:http://rpg.blue/forum.php?mod=re ... 8&fromuid=45435
              http://rpg.blue/forum.php?mod=re ... 3&fromuid=45435

    ---------------------------------------------------------------------------------------------
    哪位版主看到后请扣掉 5V 谢谢啦


   以上~~~~
作者: showpei    时间: 2011-1-8 10:27
本帖最后由 showpei 于 2011-1-8 10:48 编辑

在下有一個腳本,預設是半tile半tile移動的
估計可以在腳本內修改,不知道您是否有興趣?
另外還有一個腳本,是在移動路徑中設置的,可以1像素1像素設定。

跳躍腳本附上demo
腳本均不是在下所寫,內容皆有作者名稱。

move.rar (3.37 KB, 下载次数: 153)
jump.rar (259.75 KB, 下载次数: 532)
作者: 八云紫    时间: 2011-1-8 11:34
本帖最后由 八云紫 于 2011-1-10 15:48 编辑

回去研究一下,感觉有点复杂,整合的话~~~
作者: 诡异の猫    时间: 2011-1-8 11:41
回复 八云紫 的帖子

角色的移动和跳跃都是通过改变Game_Character的real_x和real_y来实现的
话说我之前写过一个鼠标像素移动的脚本- -
不过中途出了点小BUG一直找不出解决办法搁着了- -
我改一下发上来吧
作者: 八云紫    时间: 2011-1-8 11:42
回复 诡异の猫 的帖子

问题是跳跃时候有两个变量不知道用处。

移动的话,其实是很懒,想看看现成的脚本的说~~~
作者: 诡异の猫    时间: 2011-1-8 11:51
本帖最后由 诡异の猫 于 2011-1-8 11:53 编辑

回复 八云紫 的帖子

jump_count 和 jump_peak?
话说咱也没怎么研究过jump= =

@jump_count貌似是用来跳跃计时
这个比较好理解吧  跟anime_count和stop_count同理

至于@jump_peak是跳跃高度
首先要理一下关系
就是@real_y和@y(角色地图Y坐标)是相关联的
而screen_y是和@real_y和@jump_peak相关联的
貌似是因为如果直接通过更改@real_y来实现跳跃高度的话会使角色的Y坐标也跟着变动
所以为了使跳跃的时候角色地图Y坐标不变
才引入@jump_peak这个变量来实现不影响到@real_y和@y的情况下
直接影响screen_y来实现跳跃
作者: 八云紫    时间: 2011-1-8 11:56
回复 诡异の猫 的帖子

了解了。

不过之前测试过了,每个方向的跳跃的话,每次的 @jump_peak 都相同。所以就不太明白脚本怎么区分跳跃方向的。

另外按照咱的脚本思路上说,需要咱跳跃的过程中可以使用方向键来控制人物坐标,但是没找到刷新跳跃的地方。(其实是没去找(抱头~~~))
作者: 诡异の猫    时间: 2011-1-8 12:04
本帖最后由 诡异の猫 于 2011-1-8 12:07 编辑

回复 八云紫 的帖子

是每个方向的jump_peak都相同啊
因为如果你向上跳,@real_y本身就已经减少了256(就是1格)
同理向下跳的话@real_y本身已经增加了256了
在这基础上screen_y再算上jump_peak的
所以其实是同时通过移动+跳跃2个方法来实现的

另外在跳跃过程中能移动咩- -? 完全不知道的说
如果可以的话
那也应该是通过移动+跳跃两个方法同时实现的

对了 还有一个引入jump_peak而不直接用@real_y来实现跳跃的原因就是
更改@real_y的话地图会跟着滚动 如果这样的话就没跳跃效果的
而jump_peak是影响screen_y的
所以跳跃的时候地图不会跟着滚动
只是角色在画面上的位置变动
作者: 八云紫    时间: 2011-1-8 12:13
回复 诡异の猫 的帖子

明白很多。感谢猫大。

原来它的跳跃是先移动人物的坐标,然后使用 jump_peak 来填充之间的差来实现的。

以前就是在纠结原地跳跃是怎么实现的。想了好久也没跳出思维定式。越来越笨了~~


作者: 诡异の猫    时间: 2011-1-8 13:03
本帖最后由 诡异の猫 于 2011-1-8 13:06 编辑

回复 八云紫 的帖子

首先先理一下个变量间的关系吧...其实这里可以完全忽略X坐标和Y坐标
地图的滚动是通过改变@real_x和@real_y的值来实现的
而sreen_x和screen_y是角色在画面上的位置  一般都是在中间
所以一般角色移动的时候screen_x和screen_y是没有变的 只是地图滚动而已 加上角色的行走动作

但screen_x是@real_x的函数,screen_y是@real_y的函数
角色移动@real_x和@real_y会变,因此screen_x,y也会变才对
不过这里是通过Game_Map的adjust_x和adjust_y方法来决定screen_x,y变不变的
只有当地图滚到边了screen_x,y才会变

还有一种情况screen_y会变就是跳跃
screen_y受两个变量影响:@real_y和@jump_peak

刚看了下Jump的方法
并不是同时通过移动和跳跃来实现的说...抱歉
首先看下Game_Character的update方法
  1.   def update
  2.     if jumping?                 # 跳跃
  3.       update_jump
  4.     elsif moving?               # 移动
  5.       update_move
  6.     else                        # 停止
  7.       update_stop
  8.     end
  9.   end
复制代码
jumping的时候是update_jump,moving的时候是update_move
所以不是同时update_jump和move的说...抱歉

再来看看jumping?哪来的
  1.   def jumping?
  2.     return @jump_count > 0
  3.   end
复制代码
就是当jump_count > 0的时候jumping就为true

那jump_count哪来的- - 继续看下jump方法
  1.   def jump(x_plus, y_plus)
  2.     if x_plus.abs > y_plus.abs            # 横向距离较大
  3.       x_plus < 0 ? turn_left : turn_right
  4.     elsif x_plus.abs > y_plus.abs         # 纵向距离较大
  5.       y_plus < 0 ? turn_up : turn_down
  6.     end
  7.     @x += x_plus
  8.     @y += y_plus
  9.     distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round
  10.     @jump_peak = 10 + distance - @move_speed
  11.     [color=Magenta]@jump_count = @jump_peak * 2[/color]
  12.     @stop_count = 0
  13.     straighten
  14.   end
复制代码
一旦JUMP的时候就有jump_count了
来翻译一下Jump这个方法先...
  1. 第2-6句只是判定角色朝向用的
  2. 接着第7-8句直接就把角色的地图坐标更改到目标位置了
  3. (只是改变了@x和@y,没有改变@real_x和@real_y,所以地图暂时不滚动)
  4. 第9句是用勾股定理算出原位置和目标位置两点间的直线距离
  5. 然后根据一定函数算出jump_peak和jump_count(含义未知)
复制代码
这样我们就得出了@jump_peak和@jump_count

继续看下update_jump
  1.   def update_jump
  2.     @jump_count -= 1
  3.     @real_x = (@real_x * @jump_count + @x * 256) / (@jump_count + 1)
  4.     @real_y = (@real_y * @jump_count + @y * 256) / (@jump_count + 1)
  5.     update_bush_depth
  6.   end
复制代码
这时才通过@jump_count来改变@real_x和@real_y
从而让地图滚动
而@jump_peak这个变量只是用来实现角色在screen_y上的位置变动,不影响地图滚动

抱歉,刚误导了你- -
如果觉得答案不满意的话5VIP可以还回去的说,不好意思

作者: 八云紫    时间: 2011-1-8 13:14
回复 诡异の猫 的帖子

好细致的回答,赞一个。

其实有个计算一直没弄明白。(其实咱是数字小白)

(@real_y * @jump_count + @y * 256) /  (@jump_count + 1)  

表示看不到懂。

----------------------------------------

另外 @jump_count = @jump_peak * 2 计算的是跳跃高度的时间,因为是先上升后下降的,所以需要2倍的时间,于是 * 2
作者: fux2    时间: 2011-1-8 14:38
预先计算跳跃帧数吗?如果途中受到阻碍咋办?
作者: 仲秋启明    时间: 2011-1-9 13:01
我记得柳柳的XP版有一个可以简单实现的方法
其实方法很简单,在《北京.飞沙》中偶刚开头就用了这种方法。

这么做需要两步:

1、在Game_Character 1中把
  attr_reader   :x                        # 地图 X 坐标 (理论坐标)
  attr_reader   :y                        # 地图 Y 坐标 (理论坐标)

改为

  attr_accessor :x                        # 地图 X 坐标 (理论坐标)
  attr_accessor :y                        # 地图 Y 坐标 (理论坐标)



2、事件中对需要操作的事件操作:

$game_map.events[事件编号].x
$game_map.events[事件编号].y


比如:
$game_map.events[1].x -= 0.5

就是让1号事件向左走半格。注意先打开事件的停止、行走时动画,效果更加逼真。



个人认为仅用在表现效果即可,当然你要有兴趣可以自己引申到一些奇怪的地方


VX测试通过,应该可以满足剧情需要
作者: fux2    时间: 2011-1-11 15:08
回复 仲秋启明 的帖子

通行判定……当+=后面的值<=0.1的时候(也就是像素小于3.2)通行判定会挂掉.
作者: 诡异の猫    时间: 2011-1-11 16:25
话说咱前两天刚写好一个八方向像素移动脚本...
不过功能上不完整,不适用于循环地图和交通工具
因为话说我做得游戏都不会用到循环地图和交通工具的说- -
所以懒得研究这部分了...
因为功能上不完整还有可能存在未知BUG所以不打算放出来的说
如果需要的话把你Q私信我我传给你吧
作者: ylfengyo    时间: 2014-1-7 21:16
诡异の猫 发表于 2011-1-11 16:25
话说咱前两天刚写好一个八方向像素移动脚本...
不过功能上不完整,不适用于循环地图和交通工具
因为话说我 ...

求大神给个八方向的像素级移动脚本0v0  [email protected]  万分感谢!




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