границы боковой прокрутки в cocos2d с помощью levelhelper

Я делаю игру с боковой прокруткой с помощью levelhelper и скрытного ввода. у меня есть пара вопросов. у меня скрытный ввод на другом слое, и я столкнулся с проблемой прокрутки с параллаксом на уровне помощника.

я не могу применить границы и правильно переместить слой. как исправить прокрутку? быть внутри границ и по центру персонажа?

у меня есть эти 2 метода внутри метода обновления

  -(void) update:(ccTime)deltaTime{
[self applyJoystick:_leftJoystick forTimeDelta:deltaTime];
[self setViewpointCenter:hero.position];}

-(void)applyJoystick:(SneakyJoystick *)aJoystick forTimeDelta:(float)delta{
CGRect worldRect = [loader gameWorldSize];
CGPoint scaledVelocity=ccpMult(aJoystick.velocity, 90.0f);
CGPoint newPosition =ccp(hero.position.x+scaledVelocity.x*delta, hero.position.y +scaledVelocity.y *delta);

float posX = MIN(worldRect.origin.x + worldRect.size.width - hero.centerToSides, MAX(hero.centerToSides, newPosition.x));
float posY = MIN(worldRect.origin.y + worldRect.size.height - hero.centerToBottom, MAX(hero.centerToBottom, newPosition.y));

[hero setPosition:cpp(posX,posY)];}

-(void)setViewpointCenter:(CGPoint) position {

CGSize winSize = [[CCDirector sharedDirector] winSize];
CGRect worldRect = [loader gameWorldSize];
CGPoint centerOfView = ccp(winSize.width/2, winSize.height/2);

int x = MAX(position.x, worldRect.origin.x + winSize.width / 2);
int y = MAX(position.y, worldRect.origin.y + winSize.height / 2);
x = MIN(x, (worldRect.origin.x + worldRect.size.width) - winSize.width / 2);
y = MIN(y, (worldRect.origin.y + worldRect.size.height) - winSize.height/2);

CGPoint actualPosition = ccp(x, y);

CGPoint viewPoint = ccpSub(centerOfView, actualPosition);
self.position = viewPoint;}

также я пытаюсь перевернуть персонажа (LHSprite), который я использую

  if (newPosition.x< hero.position.x)
    hero.flipX=YES;
else
    hero.flipX = YES;

но не работает, но я также пытался использовать

   hero.scaleX=-1 

чтобы перевернуть его вместо flipX, переворачивается, но переходит на другую сторону экрана в перевернутом виде.


person Haris    schedule 12.11.2012    source источник


Ответы (1)


решен частично.

казалось, что

myParallax = [loader parallaxNodeWithUniqueName:@"Parallax_1"];

испортил его, поэтому я отключил его,

я меняю первый метод на

-(void)applyJoystick:(SneakyJoystick *)aJoystick forTimeDelta:(float)delta{
CGRect worldRect = [loader gameWorldSize];
CGSize winSize = [[CCDirector sharedDirector] winSize];
CGPoint scaledVelocity=ccpMult(aJoystick.velocity, 200.0f);
CGPoint newPosition =ccp(hero.position.x+scaledVelocity.x*delta, hero.position.y +scaledVelocity.y *delta);

float posX = MIN(worldRect.size.width - hero.centerToSides, MAX(hero.centerToSides, newPosition.x));
float posY = MIN(winSize.height -winSize.height/2+ hero.centerToBottom, MAX(hero.centerToBottom, newPosition.y));

if (scaledVelocity.x >= 0)
    hero.scaleX = 1.0;
else
    hero.scaleX = -1.0;

[hero setPosition:ccp(posX, posY)];
}

кажется, когда прокрутка не правильная и переходит в белую область за пределами мира, и все правильно, вам нужно найти уравнение о коэффициенте параллакса, размере уровня и скорости.

person Haris    schedule 13.11.2012