Заставьте случайные спрайты в определенной координате сделать что-нибудь - PullRequest
0 голосов
/ 09 декабря 2010

Мне было интересно, может ли кто-нибудь помочь мне с моей программой, Я рандомизировал свои спрайты в определенный набор координат. Я хочу, чтобы один из спрайтов, который находится в этой конкретной координате, мог заставить их что-то делать, когда они находятся в этой случайной координате. Проблема, с которой я столкнулся, заключается в том, что мне нужно составить длинный список операторов if, говорящих, что этот спрайт здесь, и делать, если другой спрайт здесь делает то же самое.

if (red1.position.y> = 0 && red1.position.y <= 63) { id r1animation = [CCMoveTo actionWithDuration: 0.2 position: ccp (red1.position.x, 33)]; [red1 runAction: r1animation]; } if (red2.position.y> = 0 && red2.position.y <= 63) { id r2animation = [CCMoveTo actionWithDuration: 0.2 position: ccp (red2.position.x, 33)]; [red2 runAction: r2animation]; } я хочу иметь возможность сказать, если какой-либо из спрайтов находится в этой точной координате, а затем переместить их в точку, используя короткий объем кода, насколько это возможно. так что в основном группирую спрайты или что-то в этом я не уверен. </p>

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 декабря 2010

Что вы можете сделать, так это рассчитать расстояние:

    float pointX = thePoint.position.x;
float pointY = thePoint.position.y;

float pointDeltax = sprite.position.x-pointX;
float pointDeltay = sprite.position.y-pointY;
float pointDist = sqrt(pointDeltax*pointDeltax+pointDeltay*pointDeltay);

Но, возможно, решение davbryns лучше подходит вашей цели.

0 голосов
/ 09 декабря 2010

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

Во-первых, укажите «горячую точку» программно:

CGPoint hotspot = ccp(32,32); // convenience macro, 
                              //creates a CGPoint with x = 32, y = 32

Вы должны хранить ссылку на все ваши спрайты в массиве при их создании (вы также можете использовать 'маркировку' в cocos2d, но я обычно люблю использовать массив для простоты)

-(void)init {
 //.. misc
 // creating sprite returns a reference so keep it in an array
 CCSprite* curSprite = [CCSprite spriteWithFile: //...etc]
 [self.spriteArray addObject: curSprite];
 // add all sprite references to your array
}

Теперь вы можете выполнить итерацию по этому массиву, чтобы посмотреть, не перекрывают ли какие-либо фреймы спрайта горячую точку:

-(BOOL) checkAllSpritesForCollision
{
  for (CCSprite *sp in self.spriteArray)
  {
    CGRect spriteRect = sp.frame;
    if (CGRectContainsPoint(spriteRect,hotspot))
    {
       // run your action on sp...
    }
  }

  // you might like to return YES if a collision happened?
}

Это метод грубой силы, проверяющий, содержит ли каждый фрейм спрайтов заданную точку. Конечно, есть много способов снять шкуру с этой кошки, но, надеюсь, это поможет вам выбрать лучший путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...