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

Project1

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

[已经解决] 怎么让Sprite精灵的坐标移动支持小数?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
跳转到指定楼层
1
发表于 2011-5-6 07:50:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
众所周知,Sprite类给我们提供了太多的边路,如显示一个独立的图片等等....
今天无意间发现,Sprite竟然不支持小数的坐标移动!!
def main
@sprite = Sprite.new
@sprite.bitmap = 图片路径
@sprite.x = 100
@sprite.z = 9999
end
def update
@sprite.x += 0.5
#@sprite.x += 1
end
测试发现,红色的代码完全不起作用,但是蓝色代码去掉注释后,图片会缓慢的移动,
也就是会所精灵的移动不能用小数!!!(试验了无数次....)
PS:在这里请教大家这个问题的解决方法,小弟对底层的RGSS不怎么懂。。。
做一个游戏也用这么长时间........
PS:说我自己呢

Lv3.寻梦者

酱油的

梦石
0
星屑
1030
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

2
发表于 2011-5-6 10:23:49 | 只看该作者
為甚麼要支持小數移動- -b難道還有半個像數不成?抱歉,不是RGSS做不到,而是咱們的計算姬做不到。
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
141 小时
注册时间
2010-12-30
帖子
312
3
发表于 2011-5-6 11:30:26 | 只看该作者
回复 禾西 的帖子

可能楼主需要做缓速移动之类的吧,比如3祯移动2象素。
另回楼主,可以取整啥的。
一个字。
回复

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1030
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

4
发表于 2011-5-6 11:44:09 | 只看该作者
回复 魔能奶糖猫 的帖子

如果是這樣的話,可以跳幀呀- -
  1. count += 1
  2. if count == 3
  3.   ...
  4.   count = 0
  5. end
复制代码

点评

妙解啊禾西大人~  发表于 2011-5-6 12:33
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2011-3-13
帖子
71
5
发表于 2011-5-6 17:56:50 | 只看该作者
http://ishare.iask.sina.com.cn/f/6218750.html
这是一个高手做的东西,虽然是一个很综合的东西,但是里面有浮点精灵,可以参考下~

点评

浮点精灵?……真是高级。  发表于 2011-5-6 20:41

游戏发布帖戳图进入> <
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
6
 楼主| 发表于 2011-5-7 10:31:28 | 只看该作者
恩...首先谢谢大家的回复,可能大家理解错了,我现在的问题是这样的:
起始图片A的X坐标155,现在要让他在10祯之内移动到X坐标 0 的地方,所以
如果这样写的话:
if A.x > 0
  A.x -= 155/10
end
显然这样写是行不通的....
如果这样写:
if A.x > 0
  A.x -= 150/10
if A.x == 5
   A.x = 0
end
end
那么在最后5个像素的时候会出现好像是直接跳过去的情况......
难道非要这样写吗?
if A.x > 2
  A.x -= 153/9
elsif A.x <= 2
  A.x = 0
end
如果这样写也不行啊....最后2祯还是有问题啊......
所以请教:10祯内移动155像素的最佳方法.....
做一个游戏也用这么长时间........
PS:说我自己呢
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2011-3-13
帖子
71
7
发表于 2011-5-7 12:03:12 | 只看该作者
本帖最后由 小⑨ 于 2011-5-7 12:04 编辑

  1. #==============================================================================
  2. # ■ FSprite V1.00
  3. #------------------------------------------------------------------------------
  4. #  浮点精灵 V1.00 by TimPKS
  5. #
  6. #   V1.00 : 初次增加此类。
  7. #==============================================================================

  8. class FSprite < Sprite
  9.   def initialize(viewport = nil)
  10.     super
  11.     @_tx = 0
  12.     @_ty = 0
  13.     @_spd = 10.0
  14.   end
  15.   def x
  16.     @_x = super if !@_x
  17.     @_tx = @_x
  18.     return @_x
  19.   end
  20.   def y
  21.     @_y = super if !@_y
  22.     @_ty = @_y
  23.     return @_y
  24.   end
  25.   def ox
  26.     @_ox = super if !@_ox
  27.     @_tox = @_ox
  28.     return @_ox
  29.   end
  30.   def oy
  31.     @_oy = super if !@_oy
  32.     @_toy = @_oy
  33.     return @_oy
  34.   end
  35.   def opacity
  36.     @_opa = super if !@_opa
  37.     return @_opa
  38.   end
  39.   def x=(value)
  40.     @_x = value
  41.     super(@_x.round)
  42.   end
  43.   def y=(value)
  44.     @_y = value
  45.     super(@_y.round)
  46.   end
  47.   def ox=(value)
  48.     @_ox = value
  49.     super(@_ox.round)
  50.   end
  51.   def oy=(value)
  52.     @_oy = value
  53.     super(@_oy.round)
  54.   end
  55.   def opacity=(value)
  56.     @_opa = value
  57.     super(@_opa.round)
  58.   end
  59. end
复制代码
上面是TimPKS写的浮点精灵代码(来自AMTT,有一些多余的东西没去掉= =,其实也就是在表达的时候可以用浮点了而已),插入上面的以后,你可以用下面的试试能不能实现。

  1. A = FSprite.new
  2. #下面是关于精灵的一些性质
  3. #=====================
  4. #下面是刷新中的内容
  5. if A.x > 0
  6.   A.x -= 155/10
  7. end

复制代码
具体效果也不会是真正的浮点(显示器必须要以像素为基础),但是在使用上肯定会方便很多~

点评

抱歉……没测试,不清楚了。  发表于 2011-5-7 13:16
好像不起作用.....  发表于 2011-5-7 13:14
这个...好像是重写了一个Sprite的子类..,那么以后调用就要用子类了..有点麻烦啊!  发表于 2011-5-7 12:51

游戏发布帖戳图进入> <
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
79
在线时间
394 小时
注册时间
2011-4-24
帖子
291
8
发表于 2011-5-7 12:09:16 | 只看该作者
本帖最后由 ZAndiH 于 2011-5-7 12:12 编辑

因为像素数量是整数,像素是图像显示的最小单位,目前为止不可能分开像素的- -
(好比元电荷是最小的电量单位、、当然你要是说到介子水平我也没辙- -)

于是可分的只剩下了时间,也就是让它出现几次1s移动2个像素效果。
如果不是眼睛特别的尖,我想应该没人看得出来吧、、



手动方法:
就是希望其中5次移动2而非1像素,而且这5次要分散开(以避免看起来太难受),那么直接在其中判断一下、、除以30取下余就好了、、等于某数值时,再 A.x += 1

自动方法:
像上面所说的那样,取整(不大于它的最大整数)。具体是哪个函数请自行寻找。(因为我也忘了RGSS里的取整函数是什么了- -)

恩、、解决问题了?

点评

元电荷不也不是最小单位么><  发表于 2011-5-7 14:37
像素不是最小单位,像VB用的Twip单位(不知道中文- -!!)就是像素的十五分之一  发表于 2011-5-7 13:47
《RM——梦想与现实之间》【论坛活动】《RM到底能做什么》
↑想知道如何快速获得60VIP?请点↑
回复

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

9
发表于 2011-5-7 12:28:54 | 只看该作者
本帖最后由 忧雪の伤 于 2011-5-7 12:39 编辑
  1. #Sprite#
  2. class Sprite
  3.   #move_to#
  4.   def move_to(x, y, time)
  5.     move_x = x - self.x;  move_y = y - self.y
  6.     time.times {Graphics.update; self.x += move_x / time; self.y += move_y / time}
  7.     self.x, self.y = x, y
  8.   end
  9. end
复制代码
啊喂,无视我吧,我是打酱油的……
以下为测试……

  1. sprite = Sprite.new
  2. sprite.bitmap = RPG::Cache.icon("001-Weapon01")
  3. sprite.move_to(50, 50, 50)
  4. print sprite.x
  5. print sprite.y
复制代码

点评

再次说一下..Graphics.update执行的时候所有图像都会停止!!这个方法实在是!!!  发表于 2011-5-7 12:59
Graphics.update.......竟然会出现刷新图像的情况...... 者的没想到....PS:我试试看  发表于 2011-5-7 12:49
原来是直接改Sprite呀……  发表于 2011-5-7 12:33
回复

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1030
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

10
发表于 2011-5-7 13:41:23 | 只看该作者
本帖最后由 禾西 于 2011-5-8 16:00 编辑

看不懂嗎,那麼我改個說法吧:

  1. count ||= 0
  2. if count < 2
  3.   count += 1
  4.   dx = 12 + count
  5. else
  6.   dx = 16
  7. end
  8. spr.x -= dx
  9. count = 0 if spr.x == 0
复制代码

点评

你这个方法我无语了........PS:RGSS是默认1桢执行一行代码???  发表于 2011-5-7 15:31
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 21:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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