查看: 1524|回复: 4

[已经过期] 关于@sx = 144 << 10

[复制链接]
梦石
0
星屑
82
在线时间
124 小时
注册时间
2011-10-6
回帖
17
发表于 2016-8-20 23:28:07 | 显示全部楼层 |阅读模式

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

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

×
百度144 << 10 =147456,<< 表示位左移,相当于*2,请问@sx = 144 << 10这句x坐标的赋值是什么作用?(初始化@sx = x << 10)
顺便@count = (@count + 1) & 255这句位AND有什么效果?(初始值@count=0)
梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

发表于 2016-8-21 07:53:36 | 显示全部楼层
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

点评

谢谢解答  发表于 2016-8-21 19:58

评分

参与人数 1星屑 +100 收起 理由
hys111111 + 100 认可答案

查看全部评分


  -fk: -azogi:
回复 1 0

使用道具 举报

梦石
0
星屑
82
在线时间
124 小时
注册时间
2011-10-6
回帖
17
 楼主| 发表于 2016-8-21 19:59:18 | 显示全部楼层
@kuerlulu 谢谢解答,大神能不能再看看下面的代码,好多<< 10不知道是做什么的

[pre lang="ruby"] attr_reader :sx
attr_reader :sy

def initialize(x, y)
    super(nil)
    self.x = x + 32
    self.y = y + 32
    self.ox = 16
    self.oy = 16
    self.z = 100
    self.bitmap = Cache.character($game_temp.tshoot_p_name)
    self.src_rect = Rect.new($game_temp.tshoot_p_index % 4 * 96 + 32,
      $game_temp.tshoot_p_index / 4 * 128 + 96, 32, 32)
    @sx = x << 10
    @sy = y << 10
    @reload = 0     
    @throw = 0      
    @anime = 0      
  end

def update_move
    vx = 0
    vy = 0
    if Input.press?(Input::A)
      speed = $game_temp.tshoot_p_speed_slow
    else
      speed = $game_temp.tshoot_p_speed
    end
   
    if Input.press?(Input::LEFT)
      vx = $game_temp.tshoot_move_reverse ? speed : -speed
    elsif Input.press?(Input::RIGHT)
      vx = $game_temp.tshoot_move_reverse ? -speed : speed
    end
    if Input.press?(Input::UP)
      vy = $game_temp.tshoot_move_reverse ? speed : -speed
    elsif Input.press?(Input::DOWN)
      vy = $game_temp.tshoot_move_reverse ? -speed : speed
    end
    if vx != 0 and vy != 0
      vx = vx * 7 / 10
      vy = vy * 7 / 10
    end
    @sx += vx
    @sy += vy
    @sx -= vx if @sx < 0 or @sx > (288 << 10)
    @sy -= vy if @sy < 0 or @sy > (352 << 10)
    self.x = (@sx >> 10) + 32
    self.y = (@sy >> 10) + 32
end[/pre]
回复

使用道具 举报

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

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

  -fk: -azogi:
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部