小数问题 控件移动问题(50分)

  • 主题发起人 主题发起人 delphidel
  • 开始时间 开始时间
D

delphidel

Unregistered / Unconfirmed
GUEST, unregistred user!
例如:在t时间内,要把width为d的panel移动一下.即panel尾部移到开始头部的地方..换句话说..就是在t时间内移动d这么长..
用一个timer,通过控件panel的left来实现..如果t:=100,d:=1500,timer为1,那么就要每次移动d/t=1.5..可是left是integer,是不能使用小数的,请问要怎样实现这样的移动..要精确..
 
Width的1就是屏幕的一个象素,就是移动的最小值
四舍五入或去掉小数部份来移动吧
 
不可能实现小于一个象素的移动。
 
四舍五入,好像只能这样精确吧
 
这样很不精确啊..如果舍掉的话..规定时间内就移不完了...如果入了的话..规定时间内就移过头了...请问各位有没有什么解决办法啊..
 
你计算每步移动量,比如现在是每次移动d/t=1.5,你使用否点数,但是进行每次移动时,你取整,这样每次的误差做多就是一个象素。
比如每次移动d/t=1.5,第1次你从0到2,第2次到3(1.5*2),第3次到5(实际上是4.5),第4次是6,就这样类推,应该可以得到你想要的效果。
 
不是每次移多少,而是每次移到哪个位置,应该根据下次移动的位置来判断移动多少,这应该是图形学的知识。
当你算出下次移动到7.3,你就取移动到7,算出移动到10.8,就取移动到11,在Timer触发时计算,我想应该是这样。
 
后退
顶部