оператор if, который группирует все операторы в один оператор if - PullRequest
3 голосов
/ 25 января 2011

как вы делаете оператор if, который группирует все операторы в один оператор if, на данный момент у меня есть 20 или что-то 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);
    }
}

Ответы [ 2 ]

4 голосов
/ 25 января 2011

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

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

// 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 голосов
/ 25 января 2011

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

...