我有一個創建球物件的球類。我想在按下滑鼠時創建一個球物件,如果按下并按住滑鼠,球應該跟隨滑鼠(按下滑鼠時)。釋放滑鼠時,小球應停留在當前 mouseX 和 mouseY 處,不再跟隨滑鼠移動。
再次按下滑鼠時,會創建另一個球物件,并與第一個物件執行相同的操作,依此類推……每次按下滑鼠時都會創建一個新的球物件。
我有一些創建物件的代碼,它跟隨滑鼠,當我釋放滑鼠時它會放在畫布上。但是如果我再次按下滑鼠,原來的球會回到滑鼠。我如何“脫離”球物件,以便我可以制作更多不影響先前放置的球的位置的球物件?
我計劃使用 ArrayLists 來制作許多物件。
class Ball {
float xPos, yPos;
Ball(float xPos, float yPos) {
this.xPos= xPos;
this. yPos= yPos;
}
void drawBall() {
ellipse(xPos, yPos, 50, 50);
println("X" xPos " Y:" yPos);
}
}
Ball ball1;
Ball ball2;
ArrayList<Ball> ballList = new ArrayList<Ball>();
void setup() {
size(600, 600);
ball1=new Ball(900, 900);
ball2=new Ball(900, 900);
}
void draw() {
background(150);
if (mousePressed ) {
ball1.xPos= mouseX;
ball1.yPos=mouseY;
}
ball1.drawBall();
}
uj5u.com熱心網友回復:
這里的問題是您根本沒有管理陣列,而是一直在使用同一個物件。我使用 arraylist 重新撰寫了您的示例來存盤 Ball 物件,并在用戶單擊滑鼠按鈕時創建新球。
請注意,我故意使用“添加到陣列串列中的最后一項”,而不是創建一個物件,該物件將作為對 this 物件的參考。這是因為我不想將您與參考資料等混淆。
ArrayList<Ball> ballList = new ArrayList<Ball>();
void setup() {
size(600, 600);
}
void draw() {
background(150);
// if the mouse button is held down, set the ball's coordinates to the mouse coordinates
if (ballList.size() > 0 && mousePressed) {
ballList.get(ballList.size() - 1).xPos = mouseX; // 'ballList.get(ballList.size() - 1)' is the java way to get the last item added to an arrayList
ballList.get(ballList.size() - 1).yPos = mouseY;
}
// draw every ball in the array (the weird format is just shorthand for a "for each" loop)
for(Ball b : ballList) {
b.drawBall();
}
}
// this method will trigger once every time the user press a mouse button
void mousePressed() {
ballList.add(new Ball(mouseX, mouseY));
}
class Ball {
float xPos, yPos;
Ball(float xPos, float yPos) {
this.xPos= xPos;
this.yPos= yPos;
}
void drawBall() {
ellipse(xPos, yPos, 50, 50);
}
}
通過瞄準最后創建的球而不是特定的球,您可以確保始終使用正確的物件。另外,請注意我是如何讓球物件在回圈中自行繪制的。'for each' 形式確保無論當前在 arrayList 中有多少個球,它們都會被列印出來。
祝這個專案好運,如果對我的回答有什么困惑,請隨時聯系并提出相關問題。
玩得開心!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/363448.html
