Наивный код, предполагающий, что касание находится в центре экрана:
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;