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

Project1

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

[已经解决] 地图的类Game_Map显示坐标为什么乘128而不是32?

[复制链接]

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
跳转到指定楼层
1
发表于 2012-2-7 02:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jhhuang 于 2012-2-7 02:16 编辑
  1. #============================================================================
  2. # ■ Game_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图的类。包含卷动以及可以通行的判断功能。
  5. # 本类的实例请参考 $game_map 。
  6. #============================================================================
  7. class Game_Map
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor :display_x                # 显示 X 坐标 * 128
  12.   attr_accessor :display_y                # 显示 Y 坐标 * 128
复制代码
定义display_x,display_y后.(PS:地图的图块大小为32x32),每次代入坐标变量时却*128
例:
  1. #============================================================================
  2. # ■ Game_Player
  3. #------------------------------------------------------------------------------
  4. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  5. # 本类的实例请参考 $game_player。
  6. #============================================================================
  7. class Game_Player < Game_Character
  8.   #--------------------------------------------------------------------------
  9.   # ● 恒量
  10.   #--------------------------------------------------------------------------
  11.   CENTER_X = (320 - 16) * 4   # 画面中央的 X 坐标 * 4
  12.   CENTER_Y = (240 - 16) * 4   # 画面中央的 Y 坐标 * 4
  13.   #--------------------------------------------------------------------------
  14.   # ● 像通到画面中央一样的设置地图的显示位置
  15.   #--------------------------------------------------------------------------
  16.   def center(x, y)
  17.     max_x = ($game_map.width - 20) * 128
  18.     max_y = ($game_map.height - 15) * 128
  19.     $game_map.display_x = [0, [x * 128 - CENTER_X, max_x].min].max
  20.     $game_map.display_y = [0, [y * 128 - CENTER_Y, max_y].min].max
  21.   end
复制代码
大量数据取得坐标后都要*4或*4*32(128)
然后取得地图坐标(x,y)*128之后....
最后取得实际坐标又要/4
# 刷新元件地图
@tilemap.ox = $game_map.display_x / 4
@tilemap.oy = $game_map.display_y / 4

4*32/4=32
乘4又除4感觉存在大量多余数据,为什么不一开始就以32作为对象而选择128?
是写法习惯还是什么问题?

Lv1.梦旅人

梦石
0
星屑
217
在线时间
828 小时
注册时间
2010-6-22
帖子
120

开拓者

2
发表于 2012-2-7 12:18:30 | 只看该作者
128 / 4 = 32
所以如果不乘以 128 改乘 32 的話,
@tilemap.ox 、 @tilemap.oy 就不用再多除以 4 了。
大概吧...

点评

没错,如果乘32,就不用再故意去除4,所以想问为什么默认工程还故意去乘128造成这么多多余的计算.  发表于 2012-2-7 18:18
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
57 小时
注册时间
2009-7-9
帖子
124
3
发表于 2012-2-7 16:38:34 | 只看该作者
@display_x 用于滚动画面
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
260
在线时间
227 小时
注册时间
2009-7-26
帖子
216
4
发表于 2012-2-7 23:35:39 | 只看该作者
是不是因为像素坐标和底层得那个计算不同?(乱猜)

默认脚本其实写的非常烂⋯⋯不要说这个乘4除4了,记得有一行是一大串加减乘除,结果由于ruby四舍五入,其实一个除法就能解决⋯⋯
不要吐槽我⋯⋯
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3657
在线时间
4466 小时
注册时间
2008-6-12
帖子
802
5
发表于 2012-2-8 14:09:35 | 只看该作者
在操作变量里。操作数选为角色的X坐标。。。画面X坐标,
我想大概就是这个问题吧,如果地图太大,如果按照原地图坐标显示一些东西的话,可能那些坐标不在当前画面内,或者显示出来的部分不完全
*128就是为了引入画面XXX坐标吧
本人三无老人,请大神轻拍
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-1 07:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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