2013-02-22 2 views
0

Было немного смущено об этом, поэтому я думал, что отправлю. Извините, если мой заголовок не ясен, очень новый для java и не был уверен, как его объяснить. Во всяком случае Вот мои наборы кода до сих пор (проблемные биты я думаю)Прекращение использования метода для перехода к следующему методу

int currentImageIndex = 0; // Assuming [0] is your first image. 
int[] nextImageList = { 2, 4, 5, 4, 5, 4, 5, 0, 1 }; 

public void nekoRun() { 
    moveIn(); 
    scratch(); 
    moveOut(); 

private void moveIn() { 
    for (int i = 0; i < getWidth()/2; i+=10) { 
     xPos = i; 
     // swap images 
     if (currentImage == nekoPics[0]) 
      currentImage = nekoPics[1]; 
     else 
      currentImage = nekoPics[0]; 
     repaint(); 
     pause(150); 

private void scratch() { 
    for (int i = xPos; i < getWidth();) { 
     xPos = i; 

     // Swap images. 
     currentImageIndex = nextImageList[currentImageIndex]; 
     currentImage = nekoPics[currentImageIndex]; 



      repaint(); 
      pause(150); 
     } 
} 

private void moveOut() { 
    for (int i = xPos; i < getWidth(); i+=10) { 
     xPos = i; 
     // swap images 
     if (currentImage == nekoPics[0]) 
      currentImage = nekoPics[1]; 

     else 
      currentImage = nekoPics[0]; 
     repaint(); 
     pause(150); 
    } 
} 

Так в основном то, что происходит (это не весь код только «сочные части», кот будет бегать по экрану и затем сидите и, предположительно, дважды поцарапайте, я получил некоторую помощь с массивом, так как я просто использовал целую кучу других, если бы заявления, и я знал, что это было лишнее. Кошка будет бежать в центр, она будет царапаться и удерживать царапины, в цикле, по понятным причинам, я просто смущен тем, как я могу заставить его перейти на метод moveOut, а не продолжать цикл. Прости, если это немного неясно, я очень новичок в этом, поэтому медведь со мной.

Заранее благодарен

+0

Как вы считаете, пересматриваете свой метод 'scratch()' scratchTwice() '. Здесь неважно, но я уверен, что вы можете увидеть значение имен методов, которые точно отражают * их функциональность в более крупных и сложных системах. – Edd

ответ

-1

Вы не увеличиваете i в scratch() и не устанавливаете i ++ в конце инструкции for.

for (int i = xPos; i < getWidth(); i++) 
+0

Это не то, что хочет OP, так как getWidth() возвращает ширину экрана. Это повторило бы getWidth()/2 раза, так как спрайт уже посередине экрана ... И он также не хочет переместить изображение dirung на фазу «царапины» ... – ppeterka

+0

спасибо, но это будет просто сделайте кошку двигаться и поцарапать – Sim

2

Ваша проблема называется бесконечный цикл ... Вместо

private void scratch() { 
    for (int i = xPos; i < getWidth();) { 

Это следует читать

private void scratch() { 
    for (int i = 0; i < 2*<how many frames the scratching takes>; i++) { 
    // **UPDATE** the xPos=i; shouldn't be here!!! 

Объяснение:

кажется, что вы скопировали определение цикла от функции moveIn(), которая кажется законной в этом случае. Что-то происходит, unitl достигает середины экрана. Но в функции scratch() спрайт не перемещается, он не будет доходить до конца экрана ... Так что озу нужно повторить шаги рисования в два раза, сколько кадров царапает. Вам придется поместить это числовое число в местозаполнитель <how many frames the scratching takes>, и он должен работать.

EDITxPos=i; не должно присутствовать в scratch() ...

+0

hmm ... это заставляет кошку сбрасывать, хотя, и любая идея, как узнать, сколько кадров царапины берутся, в идеале кошка должна быть неподвижной, дважды царапать, тогда моя другая функция должна выполнить он до конца экрана, пока работает – Sim

+0

@ user1667456 О, я вижу другую проблему. Подожди секунду! – ppeterka

+0

О, я только что исправил его, lol, глупая ошибка имела xPos = i плавающий там почему-то – Sim

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