我正在使用flappy bird演示,尝试不同的东西,只是为了“了解彼此”。通过演示,我已经成功地将游戏的方向更改为垂直向上滚动。将CGFloat反转为负值会使我的障碍向上移动,但一旦它们超出界限,它们就不会重新产生。如果我更改向下滚动的值,它们将根据update方法重新生成。有人能解释一下我在x到y的转换中做错了什么吗?为什么屏幕的底部可以识别,而屏幕的顶部不能识别?提前感谢
#import "MainScene.h"
static const CGFloat scrollSpeed = -280.f; //upwards
static const CGFloat firstObstaclePosition = -568.f;
static const CGFloat distanceBetweenObstacles = 80;
@implementation MainScene {
CCSprite *_hero;
CCPhysicsNode *_physicsNode;
NSMutableArray *_obstacles;
}
- (void)spawnNewObstacle {
CCNode *previousObstacle = [_obstacles lastObject];
CGFloat previousObstacleYPosition = previousObstacle.position.y;
if (!previousObstacle) {
// this is the first obstacle
previousObstacleYPosition = firstObstaclePosition;
}
CCNode *obstacle = [CCBReader load:@"Obstacle"];
obstacle.position = ccp(0, previousObstacleYPosition + distanceBetweenObstacles);
[_physicsNode addChild:obstacle];
[_obstacles addObject:obstacle];
}
- (void)update:(CCTime)delta {
_hero.position = ccp(_hero.position.x, _hero.position.y + delta * scrollSpeed);//move on Y axis
_physicsNode.position = ccp(_physicsNode.position.x, _physicsNode.position.y - (scrollSpeed *delta));//scroll in Y axis
//spawn more
NSMutableArray *offScreenObstacles = nil;
for (CCNode *obstacle in _obstacles) {
CGPoint obstacleWorldPosition = [_physicsNode convertToWorldSpace:obstacle.position];
CGPoint obstacleScreenPosition = [self convertToNodeSpace:obstacleWorldPosition];
if (obstacleScreenPosition.y < -obstacle.contentSize.height) {
if (!offScreenObstacles) {
offScreenObstacles = [NSMutableArray array];
}
[offScreenObstacles addObject:obstacle];
}
}
for (CCNode *obstacleToRemove in offScreenObstacles) {
[obstacleToRemove removeFromParent];
[_obstacles removeObject:obstacleToRemove];
// for each removed obstacle, add a new one
[self spawnNewObstacle];
}
}
- (void)didLoadFromCCB {
self.userInteractionEnabled = TRUE;
_obstacles = [NSMutableArray array];
[self spawnNewObstacle];
[self spawnNewObstacle];
[self spawnNewObstacle];
}
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
}
@end我附上了来自某人的_physicsNode截图。

发布于 2014-05-11 07:36:27
看起来,如果你的障碍物是一个短的、恒定的高度,并且它们之间的距离足够大,那么你的障碍物就会产生良好的效果。合并障碍物的高度可能会更好,以获得更有意义的距离变量值。这只是个想法。
这行字-
obstacle.position = ccp(0, previousObstacleYPosition + distanceBetweenObstacles);可能是-
obstacle.position = ccp(0, previousObstacleYPosition + distanceBetweenObstacles + previousObstacle.contentSize.height);至于垂直滚动向下而不是向上滚动的问题,我相信是因为下面这行:
if (obstacleScreenPosition.y < -obstacle.contentSize.height) {由于这条线负责确定一个障碍物何时离开屏幕,因此它会影响下一个障碍物的产生。这就是为什么这一行适用于向下滚动,但需要更改为向上滚动的原因。
尝试:
if (obstacleScreenPosition.y > (_physicsNode.contentSize.height + obstacle.contentSize.height)) {您可能需要也可能不需要障碍物的大小,具体取决于障碍物的锚定位置。
我希望这行得通,祝你好运。
https://stackoverflow.com/questions/23586805
复制相似问题