Xcode остановить спрайт от выхода из экрана cocos2d - PullRequest
0 голосов
/ 26 августа 2011

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

-(void)applyJoystick:(SneakyJoystick *)aJoystick toNode:(CCNode *)tempNode forTimeDelta:(float)deltaTime
{
CGPoint scaledVelocity = ccpMult(aJoystick.velocity, 1024.0f);
CGPoint newPosition = ccp(tempNode.position.x + scaledVelocity.x * deltaTime, tempNode.position.y);
CGSize screenSize = [CCDirector sharedDirector].winSize;
CGFloat spriteWidth = vikingSprite.contentSize.width;
CGFloat x = tempNode.position.x + scaledVelocity.x * deltaTime;
if (x < 0 + (spriteWidth/2)) {
    x = 0 + (spriteWidth/2);
} else if (x > screenSize.width - (spriteWidth/2)) {
    x = screenSize.width - (spriteWidth/2);

}
[tempNode setPosition:newPosition];
if (jumpButton.active == YES) {
    CCLOG(@"Jump button is pressed.");
}
if (attackButton.active == YES) {
    CCLOG(@"Attack button is pressed.");
}
}

спасибо

Ответы [ 3 ]

2 голосов
/ 20 октября 2011

Вы никогда не переназначаете измененную переменную x обратно своему викингу после того, как изменили его.

Так что вам нужно сделать что-то вроде:

if (x < 0 + (spriteWidth/2)) {
    x = 0 + (spriteWidth/2);
} else if (x > screenSize.width - (spriteWidth/2)) {
    x = screenSize.width - (spriteWidth/2);

}
CGPoint vikingPos = cpp(x, vikingsprite.position.y);
[vikingsprite setPosition:vikingPos];

Мой синтаксис может быть неправильным. Я не пишу много текстов, но я использую cocos2d-x - версию cocos2d на C ++

.
0 голосов
/ 26 августа 2011

Я думаю, что вы забыли сбросить свою позицию?

if (x < 0 + (spriteWidth/2)) {
x = 0 + (spriteWidth/2);
tempNode.position.x = x;
} else if (x > screenSize.width - (spriteWidth/2)) {
x = screenSize.width - (spriteWidth/2);
    tempNode.position.x = x;


}
0 голосов
/ 26 августа 2011

Установить ребро в качестве границы .

 boundary.SetAsEdge(b2Vec2(0,0), b2Vec2(winSize.width/PTM_RATIO, 0));

Не забудьте прислать Рэю Вендерлиху пиво.

...