Project1

标题: 地图的类Game_Map显示坐标为什么乘128而不是32? [打印本页]

作者: jhhuang    时间: 2012-2-7 02:15
标题: 地图的类Game_Map显示坐标为什么乘128而不是32?
本帖最后由 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?
是写法习惯还是什么问题?dsu_plus_rewardpost_czw
作者: f26401004    时间: 2012-2-7 12:18
128 / 4 = 32
所以如果不乘以 128 改乘 32 的話,
@tilemap.ox 、 @tilemap.oy 就不用再多除以 4 了。
大概吧...
作者: awyb3110    时间: 2012-2-7 16:38
@display_x 用于滚动画面
作者: darkscout3000    时间: 2012-2-7 23:35
是不是因为像素坐标和底层得那个计算不同?(乱猜)

默认脚本其实写的非常烂⋯⋯不要说这个乘4除4了,记得有一行是一大串加减乘除,结果由于ruby四舍五入,其实一个除法就能解决⋯⋯
作者: 过眼云烟    时间: 2012-2-8 14:09
在操作变量里。操作数选为角色的X坐标。。。画面X坐标,
我想大概就是这个问题吧,如果地图太大,如果按照原地图坐标显示一些东西的话,可能那些坐标不在当前画面内,或者显示出来的部分不完全
*128就是为了引入画面XXX坐标吧




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1