Мне нужно реализовать прыгающие шарики, которые можно добавлять в том положении, когда мышь нажимается и отскакивает от стен. Однако прямо сейчас я могу заставить работать первый шар, но все последующие шары появляются вне позиции мыши и имеют странное обнаружение столкновения со стеной.
Я подозреваю, что это из-за цикла for, поскольку, когда я перебираю список в обратном порядке, шары появляются в правильном положении, но все позиции шариков сбрасываются, когда я добавляю новый шар.
ArrayList<Ball> balls;
void setup() {
size (640 , 480, P3D);
noSmooth();
// Create an empty ArrayList (will store Ball objects)
balls = new ArrayList<Ball>();
}
void draw() {
background(1);
// Frame
stroke(255);
line(0, 0, -500, width, 0, -500);
line(0, 0, -500, 0, height, -500);
line(0, height, -500, width, height, -500);
line(width, height, -500, width, 0, -500);
line(0, 0, -500, 0, 0, 0);
line(width, 0, -500, width, 0, 0);
line(0, height, -500, 0, height, 0);
line(width, height, -500, width, height, 0);
//for (int i = balls.size()-1; i >= 0; i--) {
for (int i= 0; i<balls.size(); i ++){
Ball ball = balls.get(i);
ball.move();
ball.display();
}
}
void mousePressed() {
// A new ball object is added to the ArrayList (by default to the end)
balls.add(new Ball(mouseX, mouseY, random(-5.0,5),random(-5.0,5)));
}
// Simple bouncing ball class
class Ball {
PVector pos;
PVector vel;
float grav = 0.1;
Ball(float posX, float posY, float velX, float velY){
pos = new PVector(posX, posY, 1);
vel = new PVector(velX, velY, 1);
}
void move() {
// Add gravity to speed
//vel.y += grav;
// Add speed to y location
pos.add(vel);
if (pos.x>width-50) {
vel.x*=-1;
}
if (pos.y>height-50) {
vel.y*=-1;
}
if (pos.z>500) {
vel.z*=-1;
}
if (pos.x<50) {
vel.x*=-1;
}
if (pos.y<50) {
vel.y*=-1;
}
if (pos.z<0) {
vel.z*=-1;
}
}
void display() {
translate(pos.x,pos.y, -pos.z);
sphere(50);
noFill();
}
}
Я не знаю, что я должен сделать, чтобы исправить это, поэтому любая помощь приветствуется.