Поддержка различных ориентаций с помощью Cocos2d на iPhone - PullRequest
1 голос
/ 20 июня 2010

Я пытаюсь поддерживать как альбомную, так и портретную ориентации в моей игре iPhone Cocos2D, но у меня возникают проблемы с получением координат для правильного перевода.

Вот что я делаю до сих пор.

У меня есть слой GameWorld, который я всегда держу в портрете, независимо от ориентации устройства.Следующий код находится в моем событии DeviceRotated для UIDeviceOrientationLandscapeLeft.(«self» - это мой слой GameWorld)

[self runAction:[CCMoveTo actionWithDuration: 0.25f position:ccp(80, 0)]];

[self runAction:[CCRotateTo actionWithDuration:0.25f angle:90]];

Чтобы мне не приходилось писать разные коды для каждой ориентации, я надеялся использовать следующее в своем классе Sprite для перевода координат Sprite.

CGPoint spriteLoc = ccp(0,0);

CGPoint translatedSpriteLoc = [self.parent convertToNodeSpace:spriteLoc];

self.position = translatedSpriteLoc;

Однако это не работает.

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

Я что-то упустил или есть лучший способ перевести координаты?

1 Ответ

0 голосов
/ 11 июля 2010

Что ж, если вы не возражаете против «прыжкового прыжка» при переключении ориентации, вы можете просто использовать встроенную поддержку ориентации в Cocos2d.См. этот пост на форумах Cocos2d .

Если, однако, вам нужна красивая ориентация, вам, возможно, придется сделать что-то в соответствии с тем, что вы показали выше, ориентируя вещи вручную с помощью вращенияиспользуя действия.

Без более подробной информации трудно сказать, почему ваш подход не работает, но мое предположение заключается в том, что вы видите позиционирование спрайта, которое вы описываете в результате фактачто если вы не измените ориентацию, то нижний левый угол в портретной ориентации является нижним правым в альбомной ориентации при повороте влево, т. е. это одна и та же точка в пространстве GL: (0,0).Вам нужно будет переместить «исходную точку» вашего слоя GameWorld, а также повернуть его.

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

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