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

Project1

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

[RMVX发布] [新人看这里]修改vx脚本实现真八方向行走效果

[复制链接]

Lv1.梦旅人

梦石
0
星屑
67
在线时间
267 小时
注册时间
2008-7-28
帖子
13
跳转到指定楼层
发表于 2012-7-8 11:59:48 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 wanghanqing 于 2012-7-10 10:23 编辑

潜水很久了,试发个帖子,呵呵
目标:实现vx下的真八方向行走
1.素材准备:行走图一张
就拿这张8*8的行走图好了

把它命名为“$楚歌”复制到Graphics\Characters文件夹下
2.修改Game_Character类
原脚本(以向左下移动为例)是这样的:
  1. #--------------------------------------------------------------------------
  2. # ● 向左下移动
  3. #--------------------------------------------------------------------------
  4. def move_lower_left
  5.   unless @direction_fix
  6.    @direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
  7.   end
  8. if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
  9. (passable?(@x-1, @y) and passable?(@x-1, @y+1))
  10.   @x -= 1
  11.   @y += 1
  12.   increase_steps
  13.   @move_failed = false
  14. else
  15.   @move_failed = true
  16. end
  17. end
复制代码
修改为
  1. def move_lower_left
  2. #~ unless @direction_fix
  3. #~ @direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
  4. #~ end
  5. @direction=1                    
  6. if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
  7. (passable?(@x-1, @y) and passable?(@x-1, @y+1))
  8. @x -= 1
  9. @y += 1
  10. increase_steps
  11. @move_failed = false
  12. elsif (passable?(@x,@y+1)==false)and (passable?(@x-1,@y+1)==false)and passable?(@x-1,@y)
  13. @x-=1
  14. increase_steps
  15. @move_failed=false
  16. elsif (not passable?(@x-1,@y+1))and (not passable?(@x-1,@y))and passable?(@x,@y+1)
  17. @y+=1
  18. increase_steps
  19. @move_failed=false
  20. else
  21. @move_failed = true
  22. end
  23. end
复制代码
主要是添加了两个条件分歧来增强手感
其它三个斜方向可同理修改
3.修改Game_Player类
  1. #--------------------------------------------------------------------------
  2. # ● 方向键移动处理
  3. #--------------------------------------------------------------------------
  4. def move_by_input
  5. return unless movable?
  6. return if $game_map.interpreter.running?
  7. case Input.dir8
  8. when 2; move_down
  9. when 4; move_left
  10. when 6; move_right
  11. when 8; move_up
  12. when 1; move_lower_left
  13. when 3; move_lower_right
  14. when 7; move_upper_left
  15. when 9; move_upper_right
  16. end
  17. end
复制代码
将原脚本的case Input.dir4改为case Input.dir8,用以实现八方向输入判断
自然下面要多出四种分歧when1,3,7,9对应四个斜方向
4.修改Sprite_Character类,让八方向和行走图对应起来
  1. #--------------------------------------------------------------------------
  2. # ● 更新传送源的位图
  3. #--------------------------------------------------------------------------
  4. def update_bitmap
  5. if @tile_id != @character.tile_id or
  6. @character_name != @character.character_name or
  7. @character_index != @character.character_index
  8. @tile_id = @character.tile_id
  9. @character_name = @character.character_name
  10. @character_index = @character.character_index
  11. if @tile_id > 0
  12. sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
  13. sy = @tile_id % 256 / 8 % 16 * 32;
  14. self.bitmap = tileset_bitmap(@tile_id)
  15. self.src_rect.set(sx, sy, 32, 32)
  16. self.ox = 16
  17. self.oy = 32
  18. else
  19. self.bitmap = Cache.character(@character_name)
  20. sign = @character_name[/^[\!\$]./]
  21. if sign != nil and sign.include?('$')
  22. @cw = bitmap.width / 8
  23. @ch = bitmap.height / 8
  24. else
  25. @cw = bitmap.width / 12
  26. @ch = bitmap.height / 8
  27. end
  28. self.ox = @cw / 2
  29. self.oy = @ch
  30. end
  31. end
  32. end
复制代码
if @tile_id > 0
...
else
...
else
...
end
这个条件分歧大意就是
如果传送的元件是地图元件的话
...
如果不是(言下之意就是行走图)
...
结束
行走图又分两种
一种是8个角色在一张图上
一种是1个角色在一张图上,就像本例中的
所以出现两个else
if sign != nil and sign.include?('$')
这句话是说如果行走图名称中包含'$'字符
就像本例中的$楚歌
所以把这句话后面的两句改为
@cw = bitmap.width / 8
@ch = bitmap.height / 8
这样就可以把行走图横竖各分为八块
5.还是修改Sprite_Character类,调整传送源矩形
  1. #--------------------------------------------------------------------------
  2. # ● 更新传送源的矩形
  3. #--------------------------------------------------------------------------
  4. def update_src_rect
  5. if @tile_id == 0
  6. sx = @character.pattern * @cw
  7. case @character.direction
  8. when 2
  9. sy = 0 * @ch
  10. when 4
  11. sy = 1 * @ch
  12. when 6
  13. sy = 2 * @ch
  14. when 8
  15. sy = 3 * @ch
  16. when 1
  17. sy = 4 * @ch
  18. when 3
  19. sy = 5 * @ch
  20. when 7
  21. sy = 6 * @ch
  22. when 9
  23. sy = 7 * @ch
  24. end
  25. self.src_rect.set(sx, sy, @cw, @ch)

  26. #~ index = @character.character_index
  27. #~ pattern = @character.pattern < 3 ? @character.pattern : 1
  28. #~ sx = (index % 4 * 3 + pattern) * @cw
  29. #~ sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  30. #~ self.src_rect.set(sx, sy, @cw, @ch)


  31. end
  32. end
复制代码
被注释的是原脚本
新加的脚本很简单
就是根据角色的朝向来确定sx,sy
sx,sy就是确定下在行走图上以那个点为左上角的坐标来传送位图

6.在Game_Character类
  def update_animation
    ...
        @pattern = (@pattern + 1) % 4
    ...
  end
有这么一句
把其中的4改成8
经过以上修改
就可以实现真八方向行走效果了

不足:
1.素材只能是8*8的行走图,由于没有针对默认的素材做修改,所以使用默认素材会出错
有兴趣的同学可以自行修改
2.不能斜方向触发事件,待我再研究研究……
3.我也是新手,不足之处请多多包容


晚上又有点心得,解决了斜方向触发事件的问题
关键在于修改Game_Player类
  1.   def check_event_trigger_there(triggers)
  2.     return false if $game_map.interpreter.running? #如果某事件正在执行,则不被触发
  3.     result = false
  4.     case @direction
  5.       when 1
  6.         front_x=@x-1
  7.         front_y=@y+1
  8.       when 2
  9.         front_x=@x
  10.         front_y=@y+1
  11.       when 3
  12.         front_x=@x+1
  13.         front_y=@y+1
  14.       when 4
  15.         front_x=@x-1
  16.         front_y=@y
  17.       when 6
  18.         front_x=@x+1
  19.         front_y=@y
  20.       when 7
  21.         front_x=@x-1
  22.         front_y=@y-1
  23.       when 8
  24.         front_x=@x
  25.         front_y=@y-1
  26.       when 9
  27.         front_x=@x+1
  28.         front_y=@y-1
  29.     end
  30. #~     front_x = $game_map.x_with_direction(@x, @direction)
  31. #~     front_y = $game_map.y_with_direction(@y, @direction)
复制代码
以上代码,注释掉的是原代码,用于计算出位于角色前方的事件坐标
修改为上方case...end这一块
由于能力有限,所以写成散的
主要就是根据角色的朝向来确定角色前方的事件坐标
很简单,不多解释了
写了这么多,希望大家多多支持!

$楚歌.png (789.92 KB, 下载次数: 11)

$楚歌.png

Lv1.梦旅人

梦石
0
星屑
67
在线时间
267 小时
注册时间
2008-7-28
帖子
13
3
 楼主| 发表于 2012-7-12 18:05:22 | 只看该作者
还存在一个问题,就是斜方向走路的时候遇到障碍,比如右上方,就不走了,要不要加强手感让角色斜着走不通就绕过去呢?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
250 小时
注册时间
2011-8-16
帖子
178
2
发表于 2012-7-8 14:08:52 | 只看该作者
va要怎么修改的呢
比起八方向,多帧更吸引人,
原来3帧或者4帧的走路太假了
——————
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1379
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

1
发表于 2012-7-8 12:52:02 | 只看该作者
真八方的话。。站上有的吧。。不过也不错
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 21:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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