2012-11-12 72 views
1

我正在用levelhelper和sneakyinput进行侧面滚动游戏。 我有几个问题。 我有偷偷摸摸的输入不同的图层,而且我正在用levelhelper的视差滚动时遇到问题。cocos2d与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,翻转但转到屏幕的另一侧翻转。

回答

0

部分解决。

它似乎是

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)]; 
} 

似乎当滚动心不是正确的,去白色区域出来的世界和一切都是正确的,你需要找到一个关于视差比和等级和速度的方程。