[英]I don't know how the assignment operator works [processing]
我正在編寫一個模擬蛇的程序,並且蛇的每個部分的值都存儲在一個數組中。 為了模擬蛇的物理過程,我需要將后續部分分配給上一部分,這是我遇到的問題。
int bar;
int foo;
void setup() {}
void draw() {
foo = bar;
bar = mouseX;
println(foo);
println(bar);
}
在此示例中,foo輸出bar的先前鼠標位置是否不應該? 在將foo分配給bar之后,將Bar分配給mouseX。 賦值運算符是否這樣做,以便如果所分配的變量發生變化,則被分配給的變量也會隨之變化? 這非常令人沮喪,我認為解決方案應該很簡單。 我如何將一個變量分配給另一個變量,而不考慮將來對引用的var的更改?
編輯:這是一個應該運行但不能出於相同原因的蛇模擬器的示例,所有段最終在每個for循環的末尾都相同:
int segments = int(random(3, 10));
float springing[] = new float[segments];
float damping[] = new float[segments];
PVector accel[] = new PVector[segments];
PVector[] joints = new PVector[segments];
PVector[] delta = new PVector[segments];
PVector food = new PVector(0,0,0);
void setup() {
size(500, 500);
stroke(255);
for(int n = 0; n < joints.length; n++) {
if (n == 0) joints[0] = new PVector(random(width), random(height));
else joints[n] = joints[0];
delta[n] = new PVector(0,0,0);
accel[n] = new PVector(0,0,0);
springing[n] = .05*(.07*(n+1));
damping[n] = .95-(.02*n);
}
}
void draw() {
background(0);
food.x = mouseX;
food.y = mouseY;
for(int n = 0; n < segments; n++) {
if (n == 0) {
delta[0] = PVector.sub(food, joints[0]);
joints[0].add(delta[0]);
}
else {
delta[n] = PVector.sub(joints[n-1], joints[n]);
delta[n].mult(springing[n]);
accel[n].add(delta[n]);
joints[n].add(accel[n]);
}
point(joints[n].x, joints[n].y);
accel[n].mult(damping[n]);
}
}
在您的示例中, foo
和bar
是原始類型,因此結果應符合您的期望。 但是,如果它們是參考,那么您寫的內容將是不完整的。 在這種情況下,構造函數將幫助您保留變量的舊值。
在輸入繪制方法時,您是否嘗試過檢查bar的值並查看賦值前后的實際值?
draw()循環每秒運行多次。 再次運行時,foo被bar的值覆蓋,bar的值與上一次執行draw()的時間相同。 我認為,如果將println語句更改為:
println("foo: " + foo + " bar: " + bar);
然后,如果在移動鼠標的同時運行草圖,您將看到類似以下內容的條目:
foo: 76 bar: 84
foo: 84 bar: 91
foo: 91 bar: 97
foo: 97 bar: 97
不出所料,每次執行draw()時,foo都會采用bar在上一次執行draw()時具有的值(即mouseX),因為draw()循環會將foo設置為bar的當前值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.