我试图了解你如何能够创造一个巨大的世界,让一个角色在世界范围内移动,然后用移动的角色移动世界的可见部分。就像马里奥游戏一样。
关于“将场景置于节点上”但我根本无法理解它。我尝试实现它,但它根本不起作用。
那么,有人能帮助我吗?一个有好评的完整例子会很棒。
希望我的问题有道理,谢谢大家提前!
答案 0 :(得分:0)
他们试图与你交谈“你的游戏世界是一个节点,你需要做的只是用你的角色移动世界节点”。 游戏“冒险” - 精灵套件的示例游戏将帮助你创造一个像这样的巨大世界。
=>在纪录片中有这个游戏的示例代码。
此外,你可以创建“平铺地图”来做同样的事情。
答案 1 :(得分:0)
我使用从SKNode
继承的简单类AGMovingNode作为背景图层。
这不完美,但至少你可以从哪里开始。
以下是该类的代码:
<强> AGMovingNode.h 强>:
#import <SpriteKit/SpriteKit.h>
@interface AGMovingNode : SKNode
@property float pointsPerSecondSpeed;
- (instancetype)initWithPointsPerSecondSpeed:(float)pointsPerSecondSpeed;
- (void)update:(NSTimeInterval)currentTime paused:(BOOL)paused;
@end
<强> AGMovingNode.m 强>:
#import "AGMovingNode.h"
@implementation AGMovingNode
{
NSTimeInterval _lastUpdateTime;
NSTimeInterval _deltaTime;
}
- (instancetype)initWithPointsPerSecondSpeed:(float)pointsPerSecondSpeed {
if (self = [super init]) {
self.pointsPerSecondSpeed = pointsPerSecondSpeed;
}
return self;
}
- (void)update:(NSTimeInterval)currentTime paused:(BOOL)paused {
if (paused) {
_lastUpdateTime = 0;
return;
}
//To compute velocity we need delta time to multiply by points per second
if (_lastUpdateTime) {
_deltaTime = currentTime - _lastUpdateTime;
} else {
_deltaTime = 0;
}
_lastUpdateTime = currentTime;
CGPoint bgVelocity = CGPointMake(-self.pointsPerSecondSpeed, 0.0);
CGPoint amtToMove = CGPointMake(bgVelocity.x * _deltaTime, bgVelocity.y * _deltaTime);
self.position = CGPointMake(self.position.x+amtToMove.x, self.position.y+amtToMove.y);
}
@end
我在其中一个教程中找到了它(现在不记得是哪一个)并略微修改了它。
答案 2 :(得分:0)
如果你使用SKActions来移动物体,我发现它是最好的。
我所做的是使用精灵动画(当他站立和行走时)重新定位我的角色的方法:
- (void)moveUser:(CGPoint)position {
SKSpriteNode *user = (SKSpriteNode*)[self childNodeWithName:@"userSprite"];
// ... some logic to load correct atlas
NSArray *animationFrames = ...
SKAction *animation = [SKAction animateWithTextures:animationFrames timePerFrame:0.05f numberOfFrames:animationFrames.size];
SKAction *moveToPositionAction = [SKAction moveTo:position duration:0.4f];
[userNode runAction:[SKAction group:@[animation,moveToPositionAction]]];
}