2013-02-21 1 views
1

У меня есть кошка, которая проходит по экрану и дважды останавливается, чтобы поцарапать середину экрана. Мой текущий код выглядитЕсть ли хоть что-то, чтобы сократить, если else выражения вместо того, чтобы идти в круги

private void scratch(){ 
for (int i = xPos; i < getWidth(); i+=0) { 
    xPos = i; 
    // swap images 
    if (currentImage == nekoPics[0]) 
     currentImage = nekoPics[2]; 
    else if (currentImage == nekoPics[2]) 
     currentImage = nekoPics[4]; 
    else if (currentImage == nekoPics[4]) 
     currentImage = nekoPics[5]; 
    else if (currentImage == nekoPics[5]) 
     currentImage = nekoPics[4]; 
    else if (currentImage == nekoPics[4]) 
     currentImage = nekoPics[5]; 
    else 
     currentImage = nekoPics[0] 

Есть ли более простой способ сделать, если другое заявление, чем у них происходит в огромном круге, как это?

Заранее спасибо (PS: Я предполагаю, что вы могли бы сделать это с помощью счетчика какой-то, но я не был уверен в том, как идти об этом, любая помощь приветствуется)

+4

вы можете использовать 'switch-case'. –

+1

Что значит i + = 0 означает ???? – BobTheBuilder

+1

5-й 'if' всегда будет оцениваться как false, потому что вы проверили его в третьем' if'. – Navin

ответ

2

Вы можете сохранить индекс текущего изображения, и увеличивать его на каждой итерации, например:

currentImage = nekoPics[currentIndex%6]; 
currentIndex++; 

или

currentImage = nekoPics[currentIndex]; 
if (++currentIndex==6) currentIndex=0; 

Это требует, чтобы изображения в nekoPics быть отсортированы Acco rding до порядка анимации.

+0

сделал это, все в порядке, это один из способов, как мне заставить это выглядеть, как остановить работу, и запустить другой метод, чтобы кошка снова запустилась до конца экрана после того, как она царапается? В принципе, он начинает работать с public void moveIn, затем становится царапать, тогда у меня есть метод moveOut, чтобы он работал до конца, но я не могу заставить его начать работу после того, как он закончил счищать царапины. – Sim

0

Это, вероятно, будет проще код, если вы прекратите эту кошку от попадания в передней части экрана ...

серьезно, то вы могли бы решить эту проблему, сделав объект, который определяет последовательность картинок.

1

В дополнение к карте, предложенной в другом месте, вы можете просто использовать массив; Вам не придется следить за индексом текущего изображения:

int[5] nextImageList 
    = { 2, ?, 4, 5, 4 } 

next = nextImageList[currentImageIndex]; 
currentImage = nekoPics[next]; 
currentImageIndex = next; 

Нет «если» необходимо после инициализации currentImage и currentImageIndex. Я не был уверен, что 1 был действительным индексом где угодно, если нет, все может идти в 1 слот в массиве.

+0

Вероятно, самый простой ответ для начинающих. Я предложил изменить, так как массив состоит из (минимум) 6 слотов, а не 5. Третий слот также неизвестен. – afsantos

0

Я собирался опубликовать ответ, подобный rcook, используя массив. Я рассматриваю это как самое простое решение для понимания.

Его ответ, однако, имеет небольшую ошибку относительно размеров массива. Я публикую это для полноты, но кредит должен быть направлен ему.

// Elsewhere, in your initialization: 
int currentImageIndex = 0; // Assuming [0] is your first image. 
int[] nextImageList = { 2, -1, 4, -1, 5, 4 }; 
// Given the current index, this array will direct you 
// to the next image index. Those -1 are unknown (to us). 
// Set them to the values you need. 

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

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

     // What else you were doing here. 
    } 
} 
+0

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