标签: sknode

Sprite Kit:如何子类化SKNode以创建Vehicle类(带关节的复杂对象)

有没有人想出(本地)如何将SKNode子类化为包含多个通过关节连接的物体 - 例如,汽车?

似乎没有办法将子类的关节添加到父场景的physicsWorld属性中.

此外,当尝试编译并运行下面的对象时,即使没有关节,我也会收到BAD_EXC_ACCESS错误.

感谢@Smick在此处发布的初始车辆代码:Sprite Kit引脚接头似乎有一个不正确的锚点

卡车类:

#import "Truck.h"

@implementation Truck


-(id)initWithPosition:(CGPoint)pos {


SKSpriteNode *carBody = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(120, 8)];
carBody.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:carBody.size];
carBody.position = pos;
carBody.physicsBody.mass = 1.0;


SKSpriteNode *carTop = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(50, 8)];
carTop.position = CGPointMake(230, 708);
carTop.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:carTop.size];
carTop.physicsBody.mass = 0;

SKPhysicsJointFixed *carBodyJoint = [SKPhysicsJointFixed jointWithBodyA:carBody.physicsBody
                                                                  bodyB:carTop.physicsBody
                                                                 anchor:CGPointMake(0, 0)];



return self;
}

+(Truck*)initWithPosition:(CGPoint)pos {
return [[self alloc] initWithPosition:pos];
}


@end
Run Code Online (Sandbox Code Playgroud)

MyScene: 在此输入图像描述

subclass sprite-kit sknode

3
推荐指数
1
解决办法
5148
查看次数

iOS7 Sprite Kit可以存档整个场景并将其用作保存游戏吗?

我正在看userDataSKNode 的财产并注意到这个说法:

Sprite Kit不会对存储在节点中的数据执行任何操作.但是,在归档节点时会归档数据.

这让我想到了 - 通过归档场景及其所有的家属/控制器,是否可以实现单一的保存游戏功能?

我试图理解是否有一些神奇的[存档]消息,我可以发送到场景或场景视图,以消除编写自定义数据结构来存储保存游戏的需要.

save ios sprite-kit sknode skscene

3
推荐指数
1
解决办法
1540
查看次数

SKLabelNode定位无法按预期工作

我正在开发一款游戏,我需要实现顶级栏,持有得分和其他东西等细节.

我的顶栏应该有以下(从左到右): - 一个50x50的图标,根据级别改变,但它的大小相同 - 一个标签,其中一些文字根据级别而变化 - ...其他元素

问题是当标签文本发生变化时,标签有时离图标太远,而其他时间则超过图标(取决于文本长度)

我以为我理解定位,但显然我没有...

//create array for level text label
levelTextArray = [[NSArray alloc] initWithObjects:@"\"Uuu! Bubbles!\"",@"\"Noob\"",@"\"I’m getting it..\"",@"\"This is easy\"",@"\"Wha?\"",@"\"It’s ooon now!\"",@"\"Come on..\"",@"\"Dude…\"",@"\"You’re pushing it..\"",@"\"I’ll show you!!\"",@"\"AAAAAAA!!!\"",@"\"Holy Bubbles… \"",@"\"Ninja mode on!\"",@"\"I’m on fire!!\"",@"\"The wheel's spinning, but the hamsters dead. \"", nil];

//add level text label
levelTextLabel = [[SKLabelNode alloc] init];
levelTextLabel.text = levelTextArray[0];
levelTextLabel.position = CGPointMake(60, CGRectGetMidY(scoreImage.frame)+5);

levelTextLabel.fontColor = [UIColor colorWithRed:0/255.0f green:1/255.0f blue:0/255.0f alpha:1.0f];
levelTextLabel.fontName = @"Noteworthy-Light";
levelTextLabel.fontSize = 14.0;
[self addChild:levelTextLabel];
Run Code Online (Sandbox Code Playgroud)

scoreImage是这种情况下的图标.另外..为了使图像完全出现在视图中,我将它定位如下:

  scoreImage …
Run Code Online (Sandbox Code Playgroud)

objective-c sprite-kit sknode sklabelnode

3
推荐指数
1
解决办法
3124
查看次数

SpriteKit:检测完整的节点重叠

我有两个SKShapeNodes - 一个带有基于边缘的SKPhysicsBody,一个基于音量 - 我想要检测它们的交叉点而不会发生碰撞.我有这个工作正常,SKPhysicsContactDelegate接触方法被调用,因为一个经过另一个,但我的问题是didEndContact不再相交时被调用,即使一个主体完全包含在另一个主体内.确定真实接触或重叠的最佳方法是什么,而不仅仅是边缘交叉?我试过了usesPreciseCollisionDetection,但没有用.

ios sprite-kit skphysicsbody sknode

3
推荐指数
1
解决办法
3542
查看次数

SpriteKit:如何在跟踪节点但仅在节点移动 Y 像素后平滑地为 SKCameraNode 设置动画?

这个问题和其他问题讨论了如何使用 SKCameraNode 跟踪 SpriteKit 中的节点。

但是,我们的需求各不相同。

其他解决方案,例如更新update(_ currentTime: CFTimeInterval)SKScene 中相机的位置,不起作用,因为我们只想在节点将 Y 像素向下移动到屏幕后调整相机位置。

换句话说,如果节点向上移动 10 个像素,相机应该保持静止。如果节点向左或向右移动,相机应保持静止。

我们尝试随着时间的推移而不是立即对摄像机的位置进行动画处理,但是对内部的摄像机运行 SKActionupdate(_ currentTime: CFTimeInterval)无法执行任何操作。

ios sprite-kit sknode skcameranode

3
推荐指数
1
解决办法
1358
查看次数

定期将节点添加到场景中,中间有一个随机的时间间隔

简单地说,我试图弄清楚如何在一段时间内向我的场景添加 10 个节点,每个节点由一些随机时间间隔分隔。

例如:

Loop 10 times:

A. Create and add node to scene

B. Wait some random amount of time, 1-5 seconds

C. Back to A
Run Code Online (Sandbox Code Playgroud)

也很高兴知道它何时完成运行,当最后一个节点添加到场景时让布尔值翻转,但这需要知道最后一个节点何时完成添加。我不太确定如何实现这一点。我读了一些关于dispatch_after但这不会解决我添加节点问题之间的随机时间。

ios sprite-kit sknode swift

3
推荐指数
1
解决办法
284
查看次数

SpriteKit:如何迭代节点的祖先?

我们想要迭代节点的祖先,直到找到具有特定类的父节点。

SpriteKit 允许您使用该属性迭代子级children,但该parent属性仅保存直接父级,而不是父级数组。我们如何迭代节点的所有祖先?

ios sprite-kit skspritenode sknode

3
推荐指数
1
解决办法
353
查看次数

如果没有init方法,如何正确地子类化SKNode?

SKNode只提供+node方法.

如果你这样做:

+ (instancetype)node {
    CustomNode *body = [CustomNode node]; // infinite loop
}
Run Code Online (Sandbox Code Playgroud)

如果你这样做:

+ (instancetype)node {
    CustomNode *body = [super node]; // instance of SKNode, not CustomNode
}
Run Code Online (Sandbox Code Playgroud)

你如何继承一个只有一个方便构造函数的类,你可以覆盖构造函数?或者最好的做法是创建自己的+customNode方法?

objective-c ios sprite-kit sknode

2
推荐指数
1
解决办法
1920
查看次数

我可以在SpriteKit中减慢或停止物理吗?

在我看来,一个旨在简化的框架将具有这样的方法,而不是像我现在所做的那样从物理会计中删除每个节点:

[self enumerateChildNodesWithName:@"live" usingBlock:^(SKNode *node, BOOL *stop){
        [node removeFromParent];
}];
Run Code Online (Sandbox Code Playgroud)

如果这是一个菜鸟问题,我很抱歉,我刚刚开始使用SpriteKit.谢谢!

ios sprite-kit skphysicsbody sknode

2
推荐指数
1
解决办法
2610
查看次数

检查SKNode是否正在运行某个操作

我有一个运行不同操作的SKNode.根据我想要触发其他行为的运行操作.为此,我需要了解如何检查我的SKNode上当前正在运行的操作.我知道.hasActions()但这会返回一个普通的真/假值,这对我的情况没有帮助.

有没有人有更好的解决方案?

提前致谢

sprite-kit skaction sknode swift3

2
推荐指数
1
解决办法
128
查看次数