我正在编写一个处理球/粒子运动的程序。我想对逻辑进行编程,以使“热”球每秒移动4厘米至6厘米,而“冷”球每秒移动2厘米至4厘米。如何使用每厘米的像素(113 / 2.54)(其中113是我的每英寸屏幕分辨率)来设置速度?
我只是对球的vx和vy值使用固定的数字。
这是我的Ball构造函数
[pivot]
这是我的游戏循环
public Ball(Side s, Color color) { //Side character used to determine if ball should spawn on left or right side.
//makeRandom method gives positive or negative direction for each ball
if (color == Color.RED){
this.vx = 8 * makeRandom();
this.vy = 8 * makeRandom();
} else {
this.vx = 5 * makeRandom();
this.vy = 5 * makeRandom();
}
speed = Math.sqrt(Math.pow(this.vx, 2)+Math.pow(this.vy, 2));
//position is randomized for each ball
if(s == Side.LEFT) {
this.x = leftSideBallX + (int) (50 * Math.random());
this.y = leftSideBallY + (int) (50 * Math.random());
} else {
this.x = rightSideBallX + (int) (50 * Math.random());
this.y = rightSideBallY + (int) (50 * Math.random());
}
}
答案 0 :(得分:0)
如果您确实希望速度在一定范围内(而不是x和y速度),则需要分别生成速度和方向。目前,您分别生成x和y速度,这将为您提供更大范围的组合速度。这需要一些基本的触发。
我建议将模型的值与用户界面注意事项分开(例如,从cms转换为#pixels。我还建议封装您的热量概念。
class Ball {
private float angle;
private float speed;
public Ball(Random random, Heat heat) {
this.angle = random.nextFloat(Math.PI * 2);
this.speed = heat.randomSpeed(random);
}
public float xVelocity() {
return speed * Math.cos(angle);
}
public float yVelocity() {
return speed * Math.sin(angle);
}
}
class ScreenConverter {
private static final float PIXELS_PER_CM = 113f/2.54f;
public float pixelsToDistance(int pixels) {
return pixels * PIXELS_PER_CM;
}
public int distanceToPixels(float distanceInCMs) {
return int(distanceInCM / PIXELS_PER_CM);
}
}