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

Project1

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

真·RMXP行走方式

 关闭 [复制链接]

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

跳转到指定楼层
1
发表于 2008-1-16 20:36:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
1、标题:真·XP行走方式

2、作者:yangff

3、摘要:无

4、首发网址:http://z.66rpg.com/dispbbs.asp?boardID=9&ID=36&page=1
http://rpg.blue/viewthread.php?tid=72173
5、教学分类:RMVX

6、发布日期:2008/1/16

7、适用人群:想做仿XP的RPG制作者

8、通用度:★★☆

9、技术应用的复杂度:60/15

10、技术学习的理解难度:20

12、关键字: XP、VX、行走

13、作者的话:

XP的行走方式不错的。

14、教学正文:
  1. #==============================================================================
  2. # ■ Sprite_Character
  3. #------------------------------------------------------------------------------
  4. #  角色显示用脚本。监视 Game_Character 类的实例、
  5. # 自动变化脚本状态。
  6. #==============================================================================

  7. class Sprite_Character < Sprite_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 定量
  10.   #--------------------------------------------------------------------------
  11.   BALLOON_WAIT = 12                  # 表情最后帧的等待时间
  12.   #--------------------------------------------------------------------------
  13.   # ● 定义实例变量
  14.   #--------------------------------------------------------------------------
  15.   attr_accessor :character                # 角色
  16.   #--------------------------------------------------------------------------
  17.   # ● 初始化对像
  18.   #     viewport  : 查看端口
  19.   #     character : 角色 (Game_Character)
  20.   #--------------------------------------------------------------------------
  21.   def initialize(viewport, character = nil)
  22.     super(viewport)
  23.     @character = character
  24.     @balloon_duration = 0
  25.     update
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 释放
  29.   #--------------------------------------------------------------------------
  30.   def dispose
  31.     dispose_balloon
  32.     super
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 刷新画面
  36.   #--------------------------------------------------------------------------
  37.   def update
  38.     super
  39.     update_bitmap
  40.     self.visible = (not @character.transparent)
  41.     update_src_rect
  42.     self.x = @character.screen_x
  43.     self.y = @character.screen_y
  44.     self.z = @character.screen_z
  45.     self.opacity = @character.opacity
  46.     self.blend_type = @character.blend_type
  47.     self.bush_depth = @character.bush_depth
  48.     update_balloon
  49.     if @character.animation_id != 0
  50.       animation = $data_animations[@character.animation_id]
  51.       start_animation(animation)
  52.       @character.animation_id = 0
  53.     end
  54.     if @character.balloon_id != 0
  55.       @balloon_id = @character.balloon_id
  56.       start_balloon
  57.       @character.balloon_id = 0
  58.     end
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 获取图块图像的指定图块
  62.   #     tile_id : 图块 ID
  63.   #--------------------------------------------------------------------------
  64.   def tileset_bitmap(tile_id)
  65.     set_number = tile_id / 256
  66.     return Cache.system("TileB") if set_number == 0
  67.     return Cache.system("TileC") if set_number == 1
  68.     return Cache.system("TileD") if set_number == 2
  69.     return Cache.system("TileE") if set_number == 3
  70.     return nil
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 更新画面
  74.   #--------------------------------------------------------------------------
  75.   def update_bitmap
  76.     if @tile_id != @character.tile_id or
  77.        @character_name != @character.character_name or
  78.        @character_index != @character.character_index
  79.       @tile_id = @character.tile_id
  80.       @character_name = @character.character_name
  81.       @character_index = @character.character_index
  82.       if @tile_id > 0
  83.         self.bitmap = Cache.tile($game_map.tileset_name,
  84.           @tile_id)
  85.         self.src_rect.set(0, 0, 32, 32)
  86.         self.ox = 16
  87.         self.oy = 32
  88.       # 元件 ID 为无效值的情况下
  89.       else
  90.         self.bitmap = Cache.character(@character.character_name)
  91.         @cw = bitmap.width / 4
  92.         @ch = bitmap.height / 4
  93.         self.ox = @cw / 2
  94.         self.oy = @ch
  95.      end
  96.    end
  97. end
  98.   #--------------------------------------------------------------------------
  99.   # ● 刷新传送的矩形数据
  100.   #--------------------------------------------------------------------------
  101.   def update_src_rect
  102.     if @tile_id == 0
  103. #     index = @character.character_index
  104. #     pattern = @character.pattern < 3 ? @character.pattern : 1
  105. #     sx = (pattern * 32) #* @cw
  106. #     #sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  107. #     sy = @character.direction * 32
  108. #     self.src_rect.set(sx, sy, @cw, @ch)
  109.       sx = @character.pattern * @cw
  110.       sy = (@character.direction - 2) / 2 * @ch
  111.       self.src_rect.set(sx, sy, @cw, @ch)
  112.     end
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 开始显示表情图标
  116.   #--------------------------------------------------------------------------
  117.   def start_balloon
  118.     dispose_balloon
  119.     @balloon_duration = 8 * 8 + BALLOON_WAIT
  120.     @balloon_sprite = ::Sprite.new(viewport)
  121.     @balloon_sprite.bitmap = Cache.system("Balloon")
  122.     @balloon_sprite.ox = 16
  123.     @balloon_sprite.oy = 32
  124.     update_balloon
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 刷新表情图标
  128.   #--------------------------------------------------------------------------
  129.   def update_balloon
  130.     if @balloon_duration > 0
  131.       @balloon_duration -= 1
  132.       if @balloon_duration == 0
  133.         dispose_balloon
  134.       else
  135.         @balloon_sprite.x = x
  136.         @balloon_sprite.y = y - height
  137.         @balloon_sprite.z = z + 200
  138.         if @balloon_duration < BALLOON_WAIT
  139.           sx = 7 * 32
  140.         else
  141.           sx = (7 - (@balloon_duration - BALLOON_WAIT) / 8) * 32
  142.         end
  143.         sy = (@balloon_id - 1) * 32
  144.         @balloon_sprite.src_rect.set(sx, sy, 32, 32)
  145.       end
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 释放表情图标
  150.   #--------------------------------------------------------------------------
  151.   def dispose_balloon
  152.     if @balloon_sprite != nil
  153.       @balloon_sprite.dispose
  154.       @balloon_sprite = nil
  155.     end
  156.   end
  157. end
复制代码

17、教学相关RGSS类:

Sprite_Character



哎呀,蛋疼什么的最有爱了

Lv1.梦旅人

雷欧纳德的宠物

梦石
0
星屑
50
在线时间
769 小时
注册时间
2006-8-6
帖子
3778

贵宾

18
发表于 2008-2-22 19:32:15 | 只看该作者
发布完毕。
http://rpg.blue/web/htm/news982.htm
vip+2
打酱油的- -b
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-16
帖子
300
17
发表于 2008-1-18 04:53:45 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

16
发表于 2008-1-18 04:33:48 | 只看该作者
今朝晴空春无限,古曲顿挫已千年,哎~~

我不清楚你花费多大功夫梳理心情来问我,但下面的话与以往任何恩怨无关。

“我不发任何以商业素材为主体的东西”
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

15
发表于 2008-1-17 07:08:17 | 只看该作者
XP时候有一个按像素移动(就是那个加了重力变成超级玛丽脚本的那个),我移植过VX一份……{/gg}
然后改改变成了“小红点”,就可以沿着不规则地形开车了……{/gg}
自己测试用的……请搜“小红点”……{/gg}
http://rpg.blue/viewthread.php?tid=71378&ntime=2008%2D1%2D16+23%3A10%3A23
因为没有游戏来应用,所以其实相当于没好好DEBUG....

不过我希望美兽的还是发了吧,我这个改花了,弄2D的不好还原回去了。如果可能的话人物能跳就更好了,就是像素移动 + 人物学会跳跃技能后跳过一些障碍。雨血的作者提了这样一个需求,不过我实现的结果估计和他想要的相去太远了……
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

14
 楼主| 发表于 2008-1-17 06:26:30 | 只看该作者
不管XP还是VX通行设置都是32*32滴
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

13
发表于 2008-1-17 06:04:07 | 只看该作者
以下引用很H很BL于2008-1-16 22:00:06的发言:

樱雅有个XP脚本貌似是这种方式,根据按键时间来判定移动像素


是吗…………原以为没人会想,那仍掉好了,不过我那个仍然是按一下走一次,只是行走的像素是根据不规则边缘重新换算距离了,所以专门有个脚本是扫描地图的,将所有地图数据合成一个库,以便随时调用,提高效率。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-16
帖子
300
12
发表于 2008-1-17 06:00:06 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

11
发表于 2008-1-17 05:49:27 | 只看该作者
以下引用叮当于2008-1-16 13:52:38的发言:

日本的脚本都会被转过来… 我是说不要重复劳动。



日本有像素拉线式的行走方式

啥?



就是以像素方式而不是格子方式行走,例如设定距离16像素,向左上移动,那么算法是先拉一条45度斜线,之后判断16 * 16像素内是否有阻碍,若没有,移动16单位。
反之若有阻碍,假设阻碍在12像素位置,则人物会移动到12像素,这样可以实现人物在不规则边缘的行走。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-16
帖子
300
10
发表于 2008-1-16 22:40:49 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 10:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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