好的我在Android中有一个粒子系统。
现在我使用500个左右的粒子,它们在屏幕上随机移动。我设置它以便触摸(实际上现在运动)。所有的粒子都会接近你的手指。问题在于它们以静态角度接近(不是从接触点进入它们的角度)。
任何人都有算法确定如何均匀接近一个点?我尝试在randians中获得角度然后转换等等......变得非常混乱。这个简单的方法表明我以正确的速度移动..但这是一个简单的45角度方法。 (请记住,android没有负x,y坐标..左上角是0,0 ..右下角是(max,max)。函数采用ontouch(x,y)坐标.bx,by粒子坐标。
public void moveParticles(float x, float y) {
for (Particle b : Particles)
{
if (x <= b.x)
b.x = b.x -1;
else b.x = b.x +1;
if (y <= b.y)
b.y = b.y -1;
else b.y = b.y +1;
}
}
答案 0 :(得分:2)
假定触摸的朴素代码位于屏幕的中央:
public void moveParticles(float x, float y) {
for (Particle b : Particles) {
b.x += ((b.x-x)/(x/2))*speedmodifier;
b.y += ((b.y-y)/(y/2))*speedmodifier;
}
}
触摸轴每侧标准化速度的代码:
public void moveParticles(float x, float y) {
for (Particle b : Particles) {
height_difference = screenheight-x;
width_difference = screenwidth-y;
height_ratio = (b.x < x) ? screen_height-height_difference : height_diffrence;
width_ratio = (b.y < y) ? screenwidth-width_difference : width_difference;
b.x += ((b.x-x)/height_ratio)*speedmodifier;
b.y += ((b.y-y)/width_ratio)*speedmodifier;
}
}
制作此代码的步骤: 您需要获得x和y轴上方和下方的屏幕比例,以便无论触摸在何处,都可以将粒子的速度从0标准化为1:
height_difference = screenheight-x;
width_difference = screenwidth-y;
height_ratio = (b.x < x) ? screen_height-height_difference : height_diffrence;
width_ratio = (b.y < y) ? screenwidth-width_difference : width_difference;
一旦我们获得了标准化信息,我们就可以用它来标准化粒子速度:
b.x += ((b.x-x)/height_ratio)*speedmodifier;
b.y += ((b.y-y)/width_ratio)*speedmodifier;
答案 1 :(得分:1)
将粒子的位移作为一个以收敛点为原点的向量:
x = particle.x - finger.x
y = particle.y - finger.y
获取单位矢量:
norm = sqrt(pow(x, 2.0) + pow(y, 2.0))
x = x / norm
y = y / norm
按单位矢量排放粒子* -1 *速度系数:
particle.x -= x * speed
particle.y -= y * speed
这有用吗?我刚刚把它写出来,没有试过或者没想过。