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

Project1

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

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
82
在线时间
124 小时
注册时间
2011-10-6
帖子
26
跳转到指定楼层
1
发表于 2016-8-20 23:28:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
百度144 << 10 =147456,<< 表示位左移,相当于*2,请问@sx = 144 << 10这句x坐标的赋值是什么作用?(初始化@sx = x << 10)
顺便@count = (@count + 1) & 255这句位AND有什么效果?(初始值@count=0)

Lv1.梦旅人

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

开拓者

2
发表于 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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
82
在线时间
124 小时
注册时间
2011-10-6
帖子
26
3
 楼主| 发表于 2016-8-21 19:59:18 | 只看该作者
@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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

开拓者

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

  -fk: -azogi:
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 09:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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