2017-04-05 52 views
1

我目前正在創建一個小型項目,我正在創建一個簡單的桌面遊戲式紡車。用戶將按下一個按鈕,微調器將隨機着陸四種顏色之一(紅色,綠色,黃色或藍色)。我遇到的麻煩是使旋轉器以一個圓圈(或順時針)旋轉,並隨機地在四個方格中的一箇中隨機放置。試圖在Java中創建一個旋轉的微調輪

Screenshot of game thus far

和源代碼:

void setup() { // this is run once 
    size(800, 800); 
} 

void draw() { // this is run repeatedly 
    background(255); 
    strokeWeight(2); 
    fill(255,0,0); 
    rect(100,100,300,300); 
    fill(0,96,255); 
    rect(100, 400, 300, 300); 
    fill(255,240,0); 
    rect(400, 100, 300, 300); 
    fill(0,255,0); 
    rect(400, 400, 300, 300); 

    // how to rotate this part like a spinner? 
    strokeWeight(20); 
    line(400, 400, 400, 600); 
} 

然後我需要弄清楚如何確定微調落在哪種顏色,並打印出的文字,上面寫着:「你已經登陸[色飛行員着陸]「。我很難理解旋轉後確定座標的矩陣方面。

我在Processing開發平臺中使用Java進行編碼。

+0

至於在我提出的解決方案中,最後一部分關於確定飛輪着陸位置的問題可能是最複雜的一步。我現在不能解決它,但是這裏有一篇文章可以解決這個問題:https://forum.processing.org/one/topic/return-actual-coordinates-after-translate-and-rotate .html – ThisClark

回答

0

不幸的是,在編程中使用圓和座標都有點棘手。你將不得不做一些極座標和笛卡爾座標之間的轉換。 Here's a great reference to the difference between the two.

所以,你需要首先生成0與2 PI(弧度)之間的隨機數,這是在處理容易實現: float rnd = random(0, TWO_PI);

接下來需要讓它轉換成普通座標:

float x = 200 * cos(rnd); 
float y = 200 * sin(rnd); 

最後劃清界線:line(400, 400, x + 400, y + 400);

編輯:忘記處理過rotate(),那將會是一個更加較佳S解決方案比這個混亂

0

你的第一步是要了解在不旋轉整個草圖的情況下分離到一個形狀的旋轉。有一個代碼模式,涉及到pushMatrix,popMatrix,translaterotate - 所有這些代碼模式都相互結合在一起。

// inside draw 
pushMatrix(); 
translate(400, 400); 
rotate(radians(rotation)); 
line(0, 0, 100, 100); 
popMatrix(); 

rotation += 5; 

translate功能移到原點到一個新的位置,在這種情況下400,400中的原點移動後繪製任何形狀是相對於它。這就是在新的原點上繪製0,0的原因,實際上是400,400。功能pushMatrixpopMatrix將此代碼隔離,以免影響草圖的其餘部分。在草圖中創建獨立旋轉(以及其他任何事情)是一個很好的竅門,而不必提出數學公式來抵消所有移動。想象一下,五名紡紗人員將採用不同的速度和方向。

對於逐漸變慢的微調器,我引入一個stepSize變量,並慢慢減小它,並從旋轉中減去它,直到旋轉命中爲零,並且微調器停止。

// still inside draw 
if (stepSize > 0) { 
    rotation += stepSize; 
    stepSize -= 0.05; // play around with this value 
} 

這裏有一個演示程序,把所有的拼在一起,實現了微調,將有一陣子移動,然後停止。

float rotation = 1, stepSize = 10; 

void setup() { 
    size(800, 800); 
} 

void draw() { 
    background(255); 
    strokeWeight(2); 
    fill(255, 0, 0); 
    rect(100, 100, 300, 300); 
    fill(0, 96, 255); 
    rect(100, 400, 300, 300); 
    fill(255, 240, 0); 
    rect(400, 100, 300, 300); 
    fill(0, 255, 0); 
    rect(400, 400, 300, 300); 
    strokeWeight(20); 

    pushMatrix(); 
    translate(400, 400); 
    rotate(radians(rotation)); 
    line(0, 0, 100, 100); 
    popMatrix(); 

    if (stepSize > 0) { 
    rotation += stepSize; 
    stepSize -= 0.05; // play around with this value 
    } 
} 

void mousePressed() { 
    stepSize = random(5,15); // try adjusting these values 
} 
+0

你是什麼意思的'r'的價值?我沒有看到任何具有r的變量,因爲它的名稱爲 – Alyssa

+0

對不起 - 我重寫了幾次,最後在代碼中將'r'的值更改爲'rotation'。這是在推/彈出矩陣內使用的當前旋轉的值。 – ThisClark

+0

我明白了,但你會在哪裏減少旋轉?在一個循環? – Alyssa