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

Project1

 找回密码
 注册会员
搜索
楼主: 八云紫
打印 上一主题 下一主题

[已经解决] 求 VX 像素级的人物移动脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2006-2-25
帖子
1863
1
发表于 2011-1-8 11:41:16 | 显示全部楼层
回复 八云紫 的帖子

角色的移动和跳跃都是通过改变Game_Character的real_x和real_y来实现的
话说我之前写过一个鼠标像素移动的脚本- -
不过中途出了点小BUG一直找不出解决办法搁着了- -
我改一下发上来吧
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2006-2-25
帖子
1863
2
发表于 2011-1-8 11:51:39 | 显示全部楼层
本帖最后由 诡异の猫 于 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来实现跳跃
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2006-2-25
帖子
1863
3
发表于 2011-1-8 12:04:46 | 显示全部楼层
本帖最后由 诡异の猫 于 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的
所以跳跃的时候地图不会跟着滚动
只是角色在画面上的位置变动

评分

参与人数 1+10 收起 理由
八云紫 + 10 认可答案

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2006-2-25
帖子
1863
4
发表于 2011-1-8 13:03:55 | 显示全部楼层
本帖最后由 诡异の猫 于 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可以还回去的说,不好意思

点评

不用在意什么VIP啦,那个无关紧要。 主要是能学到东西就好。  发表于 2011-1-8 13:22

评分

参与人数 1星屑 +400 收起 理由
八云紫 + 400 算是个人加分吧。不过要等待咱有分数来才能.

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2006-2-25
帖子
1863
5
发表于 2011-1-11 16:25:58 | 显示全部楼层
话说咱前两天刚写好一个八方向像素移动脚本...
不过功能上不完整,不适用于循环地图和交通工具
因为话说我做得游戏都不会用到循环地图和交通工具的说- -
所以懒得研究这部分了...
因为功能上不完整还有可能存在未知BUG所以不打算放出来的说
如果需要的话把你Q私信我我传给你吧
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-15 05:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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