问题标签 [sknode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1926 浏览

ios - 没有init方法时如何正确子类SKNode?

SKNode 只提供+node方法。

如果你这样做:

如果你这样做:

您如何子类化一个只有便利构造函数的类,以便您可以覆盖构造函数?还是创建自己的+customNode方法是最佳实践?

0 投票
1 回答
129 浏览

ios - 如何获得精灵相对于世界坐标的 zRotation?

例如,如果你有一个旋转的精灵,你添加另一个旋转的精灵,等等。您将如何确定子精灵的屏幕 zRotation 或精灵的“绝对”旋转?

0 投票
1 回答
118 浏览

objective-c - 平铺背景:并非所有精灵都出现

我正在尝试创建一个具有平铺背景的场景,在该背景上将存在用户可以选择的可用级别,并且他/她将能够平移背景以查看所有级别。

因此,正如教程中的 iOS 游戏中所建议的那样,我创建了一个SKNode *_backgroundLayer可以容纳所有瓷砖以及任何其他可以放在上面的东西。这将允许我SKNode四处移动,它的所有孩子都会随之移动。伟大的。现在,我的图块450x450 pixels如此计算,我需要 9 个图块,_backgroundLayer我使用下面的代码添加它们。

我不明白的是:它加载并定位了必须出现在我的屏幕上的前两个图块,它似乎没有加载其余部分!在模拟器的“x 节点”中,它说它有 2 个节点,而不是 9 个。它是否创建节点然后删除它们,因为它们最初不在我的 iPhone 屏幕内?我不明白。关于如何解决这个问题并解决它的任何想法?

更新:在我的 iPad Retina 中,我得到 6 个节点而不是 9 个,那么为什么它只加载和保留可以在屏幕上显示的节点,而不是我在下面的代码中要求的所有节点?

UPDATE2: NSLog(@"%d", _backgroundLayer.children.count); 确实返回 9。我很确定我在使用 UIPanGestureRecognizer 时做错了什么。我移动了错误的图层吗?

谢谢!

0 投票
0 回答
258 浏览

objective-c - UIPinchGestureRecognizer 故障

好的,我已经阅读了一些关于这个的帖子(例如UIImageView Gestures (Zoom, Rotate) Question),但我似乎无法解决我的问题。

我有以下设置:一个 SKScene、一个 SKNode _backgroundLayer 和 9 个 SKSpriteNode,它们是构成背景并附加到 _backgroundLayer 的图块。由于这 9 个图块构成一个 3x3 正方形并且它们非常大,因此我需要能够放大并查看将位于这 9 个背景图像之上的其他 SKSpriteNode。

有两个问题:1)当我捏放大或缩小时,它似乎是从 _backgroundLayer 的位置(0,0)而不是从触摸位置放大/缩小。

2)我添加了一些边界,以便用户无法滚动出 9 个背景图像。一般来说,它有效。但是,如果我放大然后移到 9 个背景图像的顶部,然后缩小边界条件,就会发疯,用户可以看到背景图像之外的黑色空间。我需要一种方法来限制用户可以根据他所在的位置进行的缩小量。

有任何想法吗?谢谢!

我在下面包含我的代码:

0 投票
1 回答
1860 浏览

ios - SKNode 位置不工作,总是默认 0,0

我正在开发相当完善的 SpriteKit 游戏,添加了一些代码以将新的 SKSpriteNode 添加到场景中,(与我在代码中的其他几十个地方所做的相同,但由于某种原因,这次它只是忽略了我为节点设置的位置,我已经通过显式尝试了 .position = CGPointMake(x,y) 并尝试了 [node setPosition:CGPointMake(x,y)]

两者都不起作用......节点确实被添加到场景中,但总是在 0,0,无论我做什么,都检查了 x 和 y 以确保它们有效并且在场景范围内,并尝试了使用显式浮点数等,不管我做什么,这个节点总是显示在 0,0,这绝对没有意义。在玩游戏的过程中,我所做的一切与我对数十个其他节点所做的相同,但无论我做什么,这个节点都不会出现在任何地方,除了 0,0:

我在这里完全不知所措,我尝试将 .0 添加到 CGPointMake 的输入中,以确保它们被处理为浮点数...无论我对这个节点做什么,当它被添加到场景时它总是默认为 0,0 位置,我很沮丧,我添加了各种节点而没有发生任何事件,只是关于这个节点添加的一些东西不起作用并且无法弄清楚有什么不同或为什么。

0 投票
2 回答
3169 浏览

ios - Sprite Kit 设置节点角度(不旋转)

好的,所以我有一个游戏,玩家(太空船)试图绕行星飞行,但如果它关闭,玩家的太空船就会转向行星。

所以我正在尝试使用:

这段代码放在场景的更新方法中。每当玩家离地球太近时,它就会开始旋转,因为我使用的是旋转方法。有没有像 setAngle 这样的方法?这样,每当调用更新时,它都会重置角度,实际上看起来玩家正在朝着地球移动。

0 投票
2 回答
3076 浏览

ios - IOS:无法获得正确的屏幕尺寸

我尝试显示一些SKNodes,并使用屏幕的宽度和高度来设置它们的位置,以使它们与不同的屏幕尺寸兼容。

但是当我以不同的屏幕尺寸运行程序时,节点的位置仍然会发生变化(3.5 英寸很好,但 4 英寸错误)。我发现这self.size.height不是屏幕的实际高度。

有谁知道如何解决这个问题?

0 投票
2 回答
1313 浏览

ios - SKNode 的运动效果

我得到 int SpriteKit。并且想知道如何在 SKNode 对象上创建运动效果。

对于 UIView 我使用以下方法:

我还没有发现任何与 SKNode 类似的东西。所以我的问题是有可能吗?如果没有,那么我该如何实现它。

0 投票
2 回答
1904 浏览

ios7 - 如何在 SKNode 之间移动 SKSpriteNode

我想将 SKSpriteNode 从一个 SKNode 移动到另一个。removeFromParent 方法实际上解除了精灵的分配。

例如,在这段代码中,MySprite 是 SKSpriteNode 的一个子类,带有一个输出字符串的 dealloc 自定义方法,只是为了让我知道该对象已被释放:

在这种情况下,精灵被释放。我认为即使在调用 removeFromParent 之后,对 sprite 的强引用也应该使其保持活动状态,但事实并非如此。

但是如果我取消注释 [self addChild:node2]; 精灵没有被释放。

我在这里很困惑。如果 removeFromParent 释放了对象,则 sprite 应该是 nil 并且我应该得到一个错误,将 nil 节点添加到父节点。不是吗?文档只是说 removeFromParent:“从其父节点中删除接收节点。” 但它没有说明这里是如何管理内存的。

0 投票
1 回答
462 浏览

objective-c - 检查 SKNode 是否在屏幕上且可见

有没有办法检查SKSpriteNode/何时出现SKNode在屏幕上(即可见) 我有一个大的滚动背景,我在其中生成生物,但如果它们不可见,我想限制它们的动画和声音。有没有办法做到这一点,我可以在更新循环中写一些东西,但我想看看在开始每帧查询暴徒位置之前是否有什么可以测试的?