2013-04-12 2 views
0

, поэтому я пытаюсь воспроизвести эту графическую программу here для моего класса java.Создание змеи с апплетом Java

Это то, что я придумал до сих пор:

import processing.core.PApplet; 

public class Assignment09b extends PApplet { 

// Create arrays to stort the x & y values of the mouse 
int [] xArray = new int [100]; 
int [] yArray = new int [100]; 

public void setup(){ 
    //Runs at 60Fps 

    size(500, 500); 
} 

public void draw(){ 
    //Changes the background each frame 
    background(0); 

    //Stores the x&y values of the mouse in the arrays 
    for (int i = 0; i < xArray.length; i++){ 
     xArray[i] = this.mouseX; 
     yArray[i] = this.mouseY; 
    } 

    //SHOULD print out the snake using series of ellipses 
    for (int i = 0; i < xArray.length; i++){ 

     //Generates a random color each time 
     fill(random(255), random(255), random(255)); 
     ellipse(xArray[i], yArray[i], 25, 25); 
    } 

} 
    } 

У меня есть несколько идей относительно того, что проблема может быть:

  1. Потому что я нахожусь в петле, его просто нерестит один эллипс очень быстро, но я не знаю, как его порождать одновременно.
  2. Возможно, это может быть проблема с частотой кадров?
  3. Я некомпетентный программист:/

Пожалуйста, ребята, можете ли вы дать мне несколько советов относительно того, что я могу делать неправильно или не совсем. Спасибо!

ответ

1

Проблема заключается в том вы устанавливаете все значения в то же время здесь:

//Stores the x&y values of the mouse in the arrays 
    for (int i = 0; i < xArray.length; i++){ 
     xArray[i] = this.mouseX; 
     yArray[i] = this.mouseY; 
    } 

Вы только хотите обновить 1 элемент в массиве и имеют другие сдвигаться одном: «старейшей» значение выходит, новое значение приходит Вы можете вручную использовать обратный цикл (от конца массива к фронту исключая 1-й элемент) или использовать arrayCopy:.

private void updateArrays(int x,int y){ 
    arrayCopy(xArray, 0, xArray, 1, xArray.length-1);//shift all elements backwards by 1 
    arrayCopy(yArray, 0, yArray, 1, yArray.length-1);//so x at index 99 goes 98, 98 to 97, etc. excepting index 0 
    xArray[0] = x;//finally add the newest value 
    yArray[0] = y;//at the start of the array (so in the next loop it gets shifted over by 1) like the above values 
} 

, который делает полный список:

import processing.core.PApplet; 

public class Assignment09b extends PApplet { 
    // Create arrays to stort the x & y values of the mouse 
    int [] xArray = new int [100]; 
    int [] yArray = new int [100]; 

    public void setup(){ 
     //Runs at 60Fps 

     size(500, 500); 
    } 

    public void draw(){ 
     //Changes the background each frame 
     background(0); 

     updateArrays(mouseX,mouseY); 

     //SHOULD print out the snake using series of ellipses 
     for (int i = 0; i < xArray.length; i++){ 

      //Generates a random color each time 
      fill(random(255), random(255), random(255)); 
      ellipse(xArray[i], yArray[i], 25, 25); 
     } 

    } 

    private void updateArrays(int x,int y){ 
    arrayCopy(xArray, 0, xArray, 1, xArray.length-1);//shift all elements backwards by 1 
    arrayCopy(yArray, 0, yArray, 1, yArray.length-1);//so x at index 99 goes 98, 98 to 97, etc. excepting index 0 
    xArray[0] = x;//finally add the newest value 
    yArray[0] = y;//at the start of the array (so in the next loop it gets shifted over by 1) like the above values 
    } 
} 

Поскольку это упражнение, я рекомендую играть больше для петель и массивов. Это то, что вы в конечном итоге используете довольно много и стоит практиковать/получать повсюду. Goodluck!

var xArray = new Array(100); 
 
var yArray = new Array(100); 
 

 
function setup(){ 
 
    createCanvas(500, 500); 
 
} 
 

 
function draw(){ 
 
    //Changes the background each frame 
 
    background(0); 
 

 
    updateArrays(mouseX,mouseY); 
 

 
    //SHOULD print out the snake using series of ellipses 
 
    for (var i = 0; i < xArray.length; i++){ 
 

 
     //Generates a random color each time 
 
     fill(random(255), random(255), random(255)); 
 
     ellipse(xArray[i], yArray[i], 25, 25); 
 
    } 
 

 
} 
 

 
function updateArrays(x,y){ 
 
    arrayCopy(xArray, 0, xArray, 1, xArray.length-1);//shift all elements backwards by 1 
 
    arrayCopy(yArray, 0, yArray, 1, yArray.length-1);//so x at index 99 goes 98, 98 to 97, etc. excepting index 0 
 
    xArray[0] = x;//finally add the newest value 
 
    yArray[0] = y;//at the start of the array (so in the next loop it gets shifted over by 1) like the above values 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.4.4/p5.min.js"></script>

+0

Спасибо так много! И да, я определенно должен исследовать массивы и петли более подробно. – Addi

Смежные вопросы