2016-05-02 104 views
1

我正在使用橢圓,旋轉,弧度等在mouseX和mouseY上創建迷你星系的項目。但是,如果每個迷你星系都可以向左或向右旋轉,我會喜歡它,因此它看起來像是一個在太空中緩慢轉動的星系。不知道我該怎麼做,但會喜歡一些指導。我是否必須創建一個數組來保存每個星系的橢圓,然後以某種方式旋轉它?我可以簡單地爲每個橢圓設置一個rotate(),因爲它繪製到屏幕上嗎?謝謝你的幫助!旋轉/車削橢圓組

var bgimg; 

function preload(){ 
//for (var i = 0; i < planetArray.length; i++) { 
bgimg = loadImage('Assets/galaxy_background.jpg'); 
} 

function setup(){ 
    createCanvas(1301, 822); 
    background(bgimg, 100); 
    //background(25,25,22); 

} 
function draw() { 
    //background(0); 
    fill(255); 
    noStroke(); 
    textSize(19); 
    text("Create mini-galaxies by holding your mouse in a location. Move to create another.", 20, 40); 
    star() 
    //function mousepressed(){ 
} 
    function star(){ 
    //angle = map(mouseX, 0,width, 0,360); 
    //rotate(radians(angle*100)); 
    noStroke(); 
    //translate(width/2, height/2); 
    translate(mouseX,mouseY); 
    fill(0); 
    rotate(radians(frameCount%360)); //rotates output of ellipses 
    rotate(radians(1000*frameCount%360)); 
    for(var i =0; i < 20; i++){ 
    push(); 
    noStroke(); 
    tint(255, 127); 
    fill(random(230),5,random(210),random(230)); 
    // fill(random(125),random(250),random(100)); 
    ellipse(10*frameCount % (width/20),0,5,5); 
    rotate(radians(mouseX, mouseY)); 
    //image(stars, 10*frameCount % (width/2),0,10,10) 
    //image((10*frameCount % (width/2),0,10,10) 
    // 
    pop(); 
    } 
} 

回答

0

如果試圖縮小範圍到MCVE,而不是發佈您的全素描你必須與你的問題,更好的運氣。很難回答一般的「我該怎麼做」類型的問題。回答具體的「我試過X,期望Y,但是改爲Z」類型問題要容易得多。話雖如此,我會嘗試在一般意義上回答:

由於您只是通過調用background()函數而不是每幀清除它來讓圖形累積,您遇到了麻煩。這沒什麼錯,但它確實使變換和旋轉不可能應用到已經繪製的東西上。

就像我在your other question說,大多數加工草圖做到這一點:

商店一切你需要的數據結構來繪製。

您可能會儲存一組PVectors。或者你可以創建一個Galaxy類,該類包含變量和函數,允許它繪製自己,你可以從draw()函數調用它。您使用的數據結構完全取決於您。

This pagethis page包含有關在p5.js中創建對象的討論,或者您可以嘗試谷歌搜索。 Here是一個使用知道如何繪製自己的類的示例,然後創建該類的實例以創建草圖。

每次清除前一幀時,調用draw()

大多數草圖每幀都會調用background()函數。這可能看起來很煩人,因爲那時你必須重繪所有內容,但這就是數據結構的用途。

重新繪製你想繪製每一幀的一切。

迭代這些數據結構並重繪您的場景。這可能與迭代PVectors數組一樣簡單,或者您可能想要創建知道如何繪製自己的對象。

就像我說過的,這是非常一般的,而你所做的取決於你如何思考上述所有問題。沒有一種最好的方法來做到這一點,所以很難更具體。