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

Project1

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

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

[复制链接]

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

跳转到指定楼层
发表于 2011-1-8 10:27:40 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
5星屑
本帖最后由 八云紫 于 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 谢谢啦


   以上~~~~

点评

一点点小小的报酬吧  发表于 2011-1-10 16:41
呃呃,純幫忙想不到有vip...不勝惶恐!  发表于 2011-1-10 16:38
都被咱挥霍掉了。> <  发表于 2011-1-8 15:09
纳尼.又多了200- - 感谢...话说八云酱经验怎么变得那么少了- -  发表于 2011-1-8 13:20

评分

参与人数 1-10 收起 理由
DeathKing -10 如贴

查看全部评分


《天空之城 —— 破碎的命运》

Lv1.梦旅人

梦石
0
星屑
50
在线时间
31 小时
注册时间
2013-10-19
帖子
13
15
发表于 2014-1-7 21:16:20 | 只看该作者
诡异の猫 发表于 2011-1-11 16:25
话说咱前两天刚写好一个八方向像素移动脚本...
不过功能上不完整,不适用于循环地图和交通工具
因为话说我 ...

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

评分

参与人数 1星屑 -50 收起 理由
铃仙·优昙华院·因幡 -50 挖坟

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

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

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42817
在线时间
7619 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

13
发表于 2011-1-11 15:08:08 | 只看该作者
回复 仲秋启明 的帖子

通行判定……当+=后面的值<=0.1的时候(也就是像素小于3.2)通行判定会挂掉.
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv4.逐梦者

醉啸 长风万里

梦石
0
星屑
6187
在线时间
6594 小时
注册时间
2007-12-16
帖子
4501

贵宾

12
发表于 2011-1-9 13:01: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测试通过,应该可以满足剧情需要

点评

修改x感觉有点点奇怪就是了~~~  发表于 2011-1-10 15:46

评分

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

查看全部评分


还在龟速填坑中
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42817
在线时间
7619 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

11
发表于 2011-1-8 14:38:26 | 只看该作者
预先计算跳跃帧数吗?如果途中受到阻碍咋办?

点评

不能跳跃的话,要么就是不能执行,那么就是忽视通行度强行跳跃的说  发表于 2011-1-8 15:09
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

10
 楼主| 发表于 2011-1-8 13:14:53 | 只看该作者
回复 诡异の猫 的帖子

好细致的回答,赞一个。

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

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

表示看不到懂。

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

另外 @jump_count = @jump_peak * 2 计算的是跳跃高度的时间,因为是先上升后下降的,所以需要2倍的时间,于是 * 2

点评

话说这句我也看不懂的说- - @jump_peak也搞不清楚为啥他要那么算- - 等高手来吧...  发表于 2011-1-8 14:58
话说这句我也看不懂的说- - @jump_peak也搞不清楚为啥他要那么算- - 等高手来吧...  发表于 2011-1-8 14:57

《天空之城 —— 破碎的命运》
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2006-2-25
帖子
1863
9
发表于 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 算是个人加分吧。不过要等待咱有分数来才能.

查看全部评分

回复

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

8
 楼主| 发表于 2011-1-8 12:13:56 | 只看该作者
回复 诡异の猫 的帖子

明白很多。感谢猫大。

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

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

点评

这个问题应该不大。之前也研究过这个,有点印象就是了。  发表于 2011-1-8 12:38
那些@real_y @y screeny jump_peak的关系是没问题 不过我不确定jump是通过移动和跳跃同时实现的说 我看下先  发表于 2011-1-8 12:31
啊 等等等 我这些都是应该..应该而已- - 我回头看下脚本再跟你确认下  发表于 2011-1-8 12:25

《天空之城 —— 破碎的命运》
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2006-2-25
帖子
1863
7
发表于 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 认可答案

查看全部评分

回复

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

6
 楼主| 发表于 2011-1-8 11:56:17 | 只看该作者
回复 诡异の猫 的帖子

了解了。

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

另外按照咱的脚本思路上说,需要咱跳跃的过程中可以使用方向键来控制人物坐标,但是没找到刷新跳跃的地方。(其实是没去找(抱头~~~))

《天空之城 —— 破碎的命运》
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-31 06:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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