2011-01-24 7 views
3

как вы делаете оператор if, который группирует все операторы в один оператор if на момент, когда у меня есть 20 или что-то, если утверждения, которые не очень эффективны, поэтому i было интересно, есть ли способ сгруппировать спрайты, чтобы, если какой-либо из моих спрайтов ушел с верхней части экрана, они снова появятся внизу и наоборот.оператор if, который группирует все операторы в один оператор if

В данный момент у меня есть это; yellow1,2,3 ... быть спрайта

if (yellow1.position.y-33>=320) { 
    yellow1.position = ccp(yellow1.position.x,33); 
} 
if (yellow1.position.y+33<=0) { 
    yellow1.position = ccp(yellow1.position.x,287); 
} 
if (yellow2.position.y-33>=320) { 
    yellow2.position = ccp(yellow2.position.x,33); 
} 
if (yellow2.position.y+33<=0) { 
    yellow2.position = ccp(yellow2.position.x,287); 
} 
if (yellow3.position.y-33>=320) { 
    yellow3.position = ccp(yellow3.position.x,33); 
} 
if (yellow3.position.y+33<=0) { 
    yellow3.position = ccp(yellow3.position.x,287); 
} 
if (yellow4.position.y-33>=320) { 
    yellow4.position = ccp(yellow4.position.x,33); 
} 
if (yellow4.position.y+33<=0) { 
    yellow4.position = ccp(yellow4.position.x,287); 
} 
if (yellow5.position.y-33>=320) { 
    yellow5.position = ccp(yellow5.position.x,33); 
} 
if (yellow5.position.y+33<=0) { 
    yellow5.position = ccp(yellow5.position.x,287); 
} 
if (yellow6.position.y-33>=320) { 
    yellow6.position = ccp(yellow6.position.x,33); 
} 
if (yellow6.position.y+33<=0) { 
    yellow6.position = ccp(yellow6.position.x,287); 
} 
if (yellow7.position.y-33>=320) { 
    yellow7.position = ccp(yellow7.position.x,33); 
} 
if (yellow7.position.y+33<=0) { 
    yellow7.position = ccp(yellow7.position.x,287); 
} 
if (yellow8.position.y-33>=320) { 
    yellow8.position = ccp(yellow8.position.x,33); 
} 
if (yellow8.position.y+33<=0) { 
    yellow8.position = ccp(yellow8.position.x,287); 
} 

здесь мой цикл до сих пор:

for (int i=0;i<16 ; i++) { 
    if (((CCSprite *)[c1array objectAtIndex:i]).position.y-((CCSprite *)[c1array objectAtIndex:i]).contentSize.height>320) { 
     ((CCSprite *)[c1array objectAtIndex:i]).position = ccp(((CCSprite *)[c1array objectAtIndex:i]).position.x,37); 
    } 
    if (((CCSprite *)[c1array objectAtIndex:i]).position.y+((CCSprite *)[c1array objectAtIndex:i]).contentSize.height<0) { 
     ((CCSprite *)[c1array objectAtIndex:i]).position = ccp(((CCSprite *)[c1array objectAtIndex:i]).position.x,253); 
    } 
} 

ответ

0

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

+0

эй чувак могли бы вы помочь мне с iphone способа кодирования в приведенном выше примере, что jdmichal отвечал я уже поставил позже цикл в cctouchmoved я просто не уверен, где поставить «создание списка». Делается ли это в файле заголовка или в главном файле с супер-if. Спасибо – Dangermouse

+0

Я получаю сообщение об ошибке со спрайтом и спрайтами и как код знает, какие спрайты считать, создание списка бит, где я пишу имена спрайтов – Dangermouse

+0

Каковы ошибки, которые вы получаете? Вы не можете использовать Sprite в качестве типа данных. Как сказал jdmichal, это просто псевдокод. Скорее всего, CCSprite, если вы используете последние версии cocos2d. Вы также захотите посмотреть класс CCArray, который должен работать более эффективно, чем NSArray. Вы знаете, как выделить NSArray или CCArray? Я не хочу быть грубым, основываясь только на ваших формулировках. Кажется, вы этого не сделали. –

4

Что вы хотите, это цикл. Но сначала вам необходимо структурировать свои данные в последовательную структуру данных, такую ​​как массив. Затем вы будете перебирать каждый элемент в массиве.

Я не знаком с программированием iPhone, но вот общая psuedocode:

// Create the list 
const int SPRITE_COUNT = 8; 
Sprite[] sprites = new Sprite[SPRITE_COUNT]; 
for(int i = 0; i < SPRITE_COUNT; ++i) 
    sprites[i] = new Sprite(); 

// Later, check for sprites outside 
for(int i = 0; i < SPRITE_COUNT; ++i) 
{ 
    if ((sprites[i].position.y + 33) <= 0) 
     ccp(sprite.position.x, 287); 
    if ((sprites[i].position.y - 33) >= 320) 
     ccp(sprite.position.x, 33); 
} 
+0

Спасибо за код, не знаю, почему я не думал о том, чтобы зацикливать его через массив :) – Dangermouse

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