2014-11-05 49 views
0

我正在构建一个永远在滚动地面的游戏。 地面有一些洞,并且当球员落入一个洞时比赛结束。 我可以滚动背景。 但我无法滚动有PhysicsBody(玩家可以站立)的“地面”。永远在SpriteKit中滚动地面

我试过2种方式,就像这样。

1)使用JSTilemap滚动TileMap 它让游戏运行如此缓慢,并且它不会永远滚动。

2)从地面图像文件中滚动SpritNode。 当我使用[SKPhysicsBody bodyWithTexture]时,出现“PhysicsBody:Could not create physics body”的错误。

哪种方式更好? 和,没有其他方法吗?

感谢,

+0

你可以在运行时创建易于物理机构所以我的建议是这样创造无尽的运行背景,包含了所有的孔和平台,但附加物理身体只有孔和平台时,他们都在里面展示区和删除他们当他们不在显示区域时,即使在较低的存储设备上也会给你一个平滑的感觉,因为你只创建了很少的物理实体。 – dragoneye 2014-11-05 05:39:35

+0

非常感谢您的回复,dragoneye! 如何创建物理实体仅可见区域? – mmmmmadoka 2014-11-05 05:45:00

+0

通过扩展SKSpriteNode或SKnode(它是SKSpriteNode或SKnode的子类)创建一个新的类洞,现在创建该类的布尔属性假设isPhysics,所以当您创建该类的新类的实例isPhysics现在是错误的 - ( void)update:(CFTimeInterval)currentTime {函数检查孔类的位置,如果它的内部显示区域附加了一个物理体,并使isPhysics为true,那么当您的代码不会再次附加物理体并删除该物理体时在可见区域之外。 – dragoneye 2014-11-05 06:20:03

回答

0

使用简单SKNode类扩展了它在我的增加对例如,全孔和平台SKNodebase addChild:hole和SKNodebase addChild:平台为每个洞和平台命名一个例子hole.name =“h1”now - (void)update:(CFTimeInterval)currentTime

[记住你的SKScene函数会更新 - (无效)更新:(CFTimeInterval),你将不得不SKNodebase类]里面写currentTime的功能

[[self children] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
     SKNode *node = (SKNode *)obj; 
     if ([node.name isEqual: @“hole”]) { 
      CGPoint position; 
      //node.position get position of node on each update 
     } 
     if([node.name isEqual: @“platform”]) 
     { 
      CGPoint position; 
      //node.position get position of node on each update 

     } 
    }]; 
+0

如果我想制作如此复杂的舞台? [this](http://クレしんタン.com/img/piman2.jpg)。 – mmmmmadoka 2014-11-06 03:05:42

0

你可以试试这个:

update(): 
ground0.position.x -= closeSpeed 
ground1.position.x -= closeSpeed 

if ground0.position.x <= -ground0.size.width{ 
    ground0.position.x = ground0.size.width - closeSpeed 
}if ground1.position.x <= -ground1.size.width{ 
    ground1.position.x = ground1.size.width - closeSpeed 
} 

我的代码工作在我的游戏,没有按”地面上没有洞。 Yu可以创建几个部分的地面并随机滚动它们

编辑: 这对于滚动背景也非常有用。

ParallaxBackground

+0

我会试试看,谢谢! – mmmmmadoka 2014-11-07 01:33:25