注意:为此,我使用了一个名为spritebuilder的程序,它允许我用比通常需要的更少的代码来创建游戏。如果您知道一个只包含代码的解决方案,那么请务必与他人分享:)
此外,对于这个问题,我在这个链接上遵循了一个教程:Build Your Own Flappy Bird Clone。只需向下滚动到显示“循环地面”的部分。
所以这就是我的问题。我目前正在一个游戏上工作,我创建了一个相机,它垂直滚动与我创建的角色精灵的长度,但我需要一个特定的图像循环。当图像离开屏幕的底部时,我希望它无限地循环到屏幕的顶部。为此,我创建了两个相同的图像(在本例中是树皮)。一个将在屏幕上,而另一个将在屏幕外,因此当第一个图像离开屏幕时,第二个图像将(无缝地)取代它。我为图像创建了两个对象,并为它们指定了名称_ground1和_ground2,我还创建了一个NSArray来存储它们。(如果上面的链接有点混乱,请参考上面的链接)下面是我的代码:
CCNode *_ground1;
CCNode *_ground2;
NSArray *_grounds;
for (CCNode *ground in _grounds) {
// get the world position of the ground
CGPoint groundWorldPosition = [_physicsNode convertToWorldSpace:ground.position];
// get the screen position of the ground
CGPoint groundScreenPosition = [self convertToNodeSpace:groundWorldPosition];
// if the left corner is one complete width off the screen, move it to the right
if (groundScreenPosition.y <(-1 * ground.contentSize.height)) {
ground.position = ccp(ground.position.x , ground.position.y + 2 * ground.contentSize.height);
}由于某些原因,当我尝试这个的时候,它似乎不起作用。发生的情况是,相机将按照预期垂直移动,但图像不会循环。一旦这两个图像离开屏幕底部,就不会有新的图像替换它们。
发布于 2014-03-13 13:53:52
我也按照上面的教程做了这个项目。它工作得很好,但是在spritebuilder中设置变量有一些错误。在上面的代码中,将代码复制为并尝试。你只是放了比可能的问题更少的东西。
if (groundScreenPosition.y <=(-1 * ground.contentSize.height)) {
ground.position = ccp(ground.position.x , ground.position.y + 2 * ground.contentSize.height);
}发布于 2014-03-14 03:35:27
您正在将CCNode对象用作_ground1和_ground2。
CCNode对象通常没有contentSize, they will return 0 unless you explicitly set them inSpriteBuilder`。
确保在SpriteBuilder和代码中使用CCSprite对象。
此外,作为一个友好的提示,您还应该考虑使用更有意义的名称重构(重命名)您的精灵,例如_treeBark1和treeBark2。
https://stackoverflow.com/questions/22368017
复制相似问题