如何处理“部分像素”

时间:2015-05-15 02:39:57

标签: c# math pixel velocity

我有一个问题,我说,中间有一个物体,然后我想从物体射出射弹。我做了很多触发/几何以获得适当的角度和这个“看不见的三角形”的边长可以这么说,但我对射弹的速度有问题。

如果我超越跑步,那么速度移动得太快,因为我的画布只有800 X 600.如果我试图通过将它除以非常大的数字来使这个数字非常小,那么它往往会破坏效果,因为像素不能移动分数/小数,所以我基本上必须保持这个数字大于0或它将完全忽略该速度。

例如,如果我的上涨超过:

rise = 800
run = 50

如果我将它除以10,我的速度.X = 5但我的速度.Y = 80(将在一秒内离开画布)。如果我除以一个更大的数字,比如100,那么velocity.Y现在是8(仍然很快,但更易于管理),但是velocity.X = 0.5,由于drawRectangle像素点需要是整数,因此将舍入为0。因此,这使得这个射弹以8的速度向上行进,并且它不会向右移动,因为它会向上移动到0。

我研究了以相同的速率增加两个速度的想法,直到两者都大于0,但这会导致(1,16),所以它很可能会很快再次移出屏幕和/或似乎从来没有被解雇过。

有没有办法处理这种情况?

2 个答案:

答案 0 :(得分:1)

使用浮点运算执行集成。甚至可能使用逼真的现实世界物理单位和维度来模拟物理。

当你来绘制系统时,从浮点物理坐标转换为整数屏幕坐标。你必须决定物理和屏幕之间的映射,但你已经在问题中证明了这一点。关键是你要尽可能地延迟转换。

答案 1 :(得分:-1)

对于射弹水平和垂直速度只有在以45度角起飞时才会相同,如果改变角度,则可以对X和Y使用不同的速度

水平速度=初始速度* cos(a) 垂直速度=初始速度* sin(a)