Project1

标题: 关于@sx = 144 << 10 [打印本页]

作者: kk9911    时间: 2016-8-20 23:28
标题: 关于@sx = 144 << 10
百度144 << 10 =147456,<< 表示位左移,相当于*2,请问@sx = 144 << 10这句x坐标的赋值是什么作用?(初始化@sx = x << 10)
顺便@count = (@count + 1) & 255这句位AND有什么效果?(初始值@count=0)
作者: kuerlulu    时间: 2016-8-21 07:53
x << n 相当于 x *= 2**n # **表示指数
144 << 10 就是 144 * (2**10)
我也不知道你这句 @sx 赋值是干什么用的(就好比你问我 a = 1 是做什么用的)

x & 255 相当于 x % 256,@count = (@count + 1) % 256 使 @count 始终在 0..255 内改变
另外,& == % + 1 一般仅成立于右侧的值为 0xfff... 的情况,也就是其二进制为 1111... 的情况,请注意
这里用 & 大概是效率上高一些(x
作者: kk9911    时间: 2016-8-21 19:59
@kuerlulu 谢谢解答,大神能不能再看看下面的代码,好多<< 10不知道是做什么的

RUBY 代码复制
  1. attr_reader :sx
  2. attr_reader :sy
  3.  
  4. def initialize(x, y)
  5.     super(nil)
  6.     self.x = x + 32
  7.     self.y = y + 32
  8.     self.ox = 16
  9.     self.oy = 16
  10.     self.z = 100
  11.     self.bitmap = Cache.character($game_temp.tshoot_p_name)
  12.     self.src_rect = Rect.new($game_temp.tshoot_p_index % 4 * 96 + 32,
  13.       $game_temp.tshoot_p_index / 4 * 128 + 96, 32, 32)
  14.     @sx = x << 10
  15.     @sy = y << 10
  16.     @reload = 0     
  17.     @throw = 0      
  18.     @anime = 0      
  19.   end
  20.  
  21. def update_move
  22.     vx = 0
  23.     vy = 0
  24.     if Input.press?(Input::A)
  25.       speed = $game_temp.tshoot_p_speed_slow
  26.     else
  27.       speed = $game_temp.tshoot_p_speed
  28.     end
  29.  
  30.     if Input.press?(Input::LEFT)
  31.       vx = $game_temp.tshoot_move_reverse ? speed : -speed
  32.     elsif Input.press?(Input::RIGHT)
  33.       vx = $game_temp.tshoot_move_reverse ? -speed : speed
  34.     end
  35.     if Input.press?(Input::UP)
  36.       vy = $game_temp.tshoot_move_reverse ? speed : -speed
  37.     elsif Input.press?(Input::DOWN)
  38.       vy = $game_temp.tshoot_move_reverse ? -speed : speed
  39.     end
  40.     if vx != 0 and vy != 0
  41.       vx = vx * 7 / 10
  42.       vy = vy * 7 / 10
  43.     end
  44.     @sx += vx
  45.     @sy += vy
  46.     @sx -= vx if @sx < 0 or @sx > (288 << 10)
  47.     @sy -= vy if @sy < 0 or @sy > (352 << 10)
  48.     self.x = (@sx >> 10) + 32
  49.     self.y = (@sy >> 10) + 32
  50. end

作者: kuerlulu    时间: 2016-8-22 08:50
猜测 <<10 的意图是整数的高精度计算(也就是考虑到小数计算四舍五入在整数时的处理方案)
一般来说,整数的效率要比浮点数高一些(在ruby中用浮点数解决也就是一句 round )
可见。。。




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