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

Project1

 找回密码
 注册会员
搜索

图片缩放循环的设置

查看数: 1836 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-8-19 21:48

正文摘要:

想写一个会随光标位置改变而在0.8倍和1倍之间来回变动的按钮,目前大概是这样 RUBY 代码复制def button_zoom(sprite,x,y,k=1)    if sprite.x != x    sprite. ...

回复

acv255 发表于 2015-8-19 23:22:06
喵呜喵5 发表于 2015-8-19 22:33
即使是浮点数,仍然毫无任何问题


你这个的效果好像是自动放大缩小循环...跟我的设想不一样
大概是我标题起错了。

不过我刚刚用了一个勉强的解决方案
  1. if sprite.zoom_x < k - 0.01
  2.       sprite.zoom_x += 0.05
  3.       sprite.zoom_y = sprite.zoom_x
  4.     elsif sprite.zoom_x > k + 0.01
  5.       sprite.zoom_x -= 0.05
  6.       sprite.zoom_y = sprite.zoom_x
  7.     end
复制代码
损失了一点精度,肉眼分辨不出来

点评

一般浮点数就是这么做的 zoom > k + epsilon, epsilon 是一个较小的数字  发表于 2015-9-5 13:30
喵呜喵5 发表于 2015-8-19 22:33:18
即使是浮点数,仍然毫无任何问题
  1. sprite = Sprite.new
  2. sprite.bitmap = Cache.system("06_avatar_big")

  3. class << sprite
  4.   def update
  5.     super   
  6.     if @zoom_in_flag
  7.       self.zoom_x += 0.01
  8.       self.zoom_y = self.zoom_x
  9.       @zoom_in_flag = false if self.zoom_x > 1      
  10.     else
  11.       self.zoom_x -= 0.01
  12.       self.zoom_y = self.zoom_x
  13.       @zoom_in_flag = true if self.zoom_x < 0.8      
  14.     end   
  15.   end
  16. end

  17. loop do
  18.   
  19.   sprite.update
  20.   
  21.   Graphics.update
  22.   
  23. end
复制代码
acv255 发表于 2015-8-19 22:19:49
cinderelmini 发表于 2015-8-19 22:11
类似这种判定,脑内演算的时候似乎可行,实际上忽略了一点细节:
【sprite.zoom_x < k ? sprite.zoom_x +=  ...

问题不出在这里
对于你说的问题我有前置判断 if sprite.zoom_y != k 的

我的问题如截图...程序计算1-0.01的时候实际上并不是0.01...我想问的是怎么摆脱这该死的浮点数

点评

啊啊~抱歉,窝把前置if忽略掉了……  发表于 2015-8-19 22:39
cinderelmini 发表于 2015-8-19 22:11:25
本帖最后由 cinderelmini 于 2015-8-19 22:40 编辑

----误人子弟伪科学----
  1. if sprite.zoom_x != k
  2.   sprite.zoom_x = sprite.zoom_x < k ? sprite.zoom_x += 0.01 : sprite.zoom_x -= 0.01
  3. end
复制代码
类似这种判定,脑内演算的时候似乎可行,实际上忽略了一点细节:
【sprite.zoom_x < k ? sprite.zoom_x += 0.01 : sprite.zoom_x -= 0.01】
sprite.zoom_x 小于 k 的时候,就增加0.01,大于或等于k的时候就减小0.01,
那么设想一个情况,当k = 1.0, sprite.zoom_x处于0.99的情况,
sprite.zoom_x + 0.01 = 1.0,
那么不满足sprite.zoom_x < k这个条件,于是sprite.zoom_x - 0.01 = 0.99,
那么又满足了sprite.zoom_x < k这个条件,于是sprite.zoom_x + 0.01 = 1.0,
以上两个步骤就在那循环了,所以看到的是这个精灵在微弱地抖动。。。

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

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

GMT+8, 2025-7-2 21:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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