问题标签 [skscene]

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 投票
2 回答
5473 浏览

ios7 - 如何停止音频 SKAction?

目标:我要呈现一个新场景:

并结束当前的背景音乐以开始新的背景音乐(2级的新背景音乐)。

问题:出现新场景时,1.场景(level1)的背景音乐一直播放,即使离开小游戏也不会停止,因为整个游戏由几个小游戏组成。

播放的音乐是一个 SKAction:

到下一个级别的转换发生在这里:

在注释代码行中,您可以查看我已经尝试过的内容以及无效的内容。这 :

什么都没做。这:

线路仅停止过渡,但音乐仍在继续。

我尝试了以下方法: - 在 a 上使用了弱或强属性:

保护指向 SKAction 的指针,以便我可以使用“withKey”属性访问它,因为我在“initWithSize”中初始化了 SKAction。有人写道,SKAction 是一个即发即弃的对象,我理解为没有存储指向它的指针,以后访问它是不可能的(直接)。但是,它没有工作/帮助我。

我查看了许多其他 stackoverflow 帖子,但没有一个对我有帮助,或者至少给了我一个线索,为什么会发生这种情况:

SKAction playSoundFileNamed 停止背景音乐

停止重复永远的 SKAction - Sprite Kit

是否可以在 SKAction 中途结束?

暂停精灵套件场景

...想法:似乎该动作是通过创建 SKScene 对象来创建的。它与它“挂钩”并在音频持续时间后完成。当我使用 repeatForever 时,它永远不会停止。但是,没有办法暂停或停止它。我还尝试将 SKAction 连接到 SKSpriteNode。当 SKScene 被加载时,动物也会被加载。所以我尝试在 SKSpriteNode 上挂接 SKAction 并使用 SKSpriteNode 中的 removeAllActions 等,但它也不起作用。

我检查了有关 SKAction、SKView、SKScene、SKSpriteNode 的文档,但最后它对我没有多大帮助。

看起来该对象存在于某个运行其操作的地方。

错误不是关于什么:

  • 它不是模拟器或设备相关的错误 - 我已经在模拟器和设备上测试了它,结果相同(错误)。

  • 这不是与项目相关的错误 - 我已经在一个单独的项目中对其进行了测试,它要小得多并且具有相同的结果(错误)。

临时解决方案:我一直在使用 AVFoundation 框架中的 AVAudioPlayer 类。我创建了一个:

这并没有太大帮助,因为我想在加载 level2 时更改背景歌曲,并且我在从嵌套的 SKScene 结构访问属性时遇到了巨大的问题。

任何建议、线索、提示或想法都会有很大帮助。

0 投票
1 回答
372 浏览

ios - skscene UIViewController 从 SKScene 发送短信

我试图让玩家在游戏结束时通过短信分享他们的分数。

我已将框架导入到我的项目中。在我的 viewController.h 文件中导入。

这是我的 viewController.h 文件

我也尝试像这样导入 MyScene.h:

当我想显示 SMS 共享时,我在 MyScene.m 文件中使用此代码

但是在这条线上

我收到“'MyScene' 没有可见的@interface 声明选择器'presentViewController:animated:completion:'”错误。

我试图搜索过去几个小时。试试天知道其他帖子/教程中有多少变化和示例(学习一些与此无关的东西很好)。似乎没有什么工作。我开始用完头发拔掉。所以任何帮助都会很棒。我相信对于你们中的一些大师来说,这应该是在公园里散步。谢谢。

编辑:我没有使用情节提要,或按钮/菜单/游戏等的视图控制器......因此我无法从 viewController 本身调用该函数。

编辑: 所以我尝试了 Paulw11 在他的链接中建议的内容。现在我有以下错误。

在我的视图控制器中

我收到“在‘MyScene’类型的对象上找不到属性‘MyViewController’”错误

也在 MyScene.m 中

[_MyViewController 发送短信]; 行我得到一个“‘MyViewController’没有可见的@interface声明选择器‘SendSMS’”

编辑 2: *编辑 2: *编辑 2: *编辑 2: *

我得到它来打开短信。小问题,它不允许我解雇它/取消。

这是我的发送短信代码:

这是我的解雇代码:

编辑 3

以下代码在正确的时间为我提供了 NSLog,但不会关闭窗口。

0 投票
1 回答
1425 浏览

ios - 奇怪的 EXC_BAD_ACCESS SpriteKit removeSubsprite 崩溃

我是新手SpriteKit,刚刚制作了我的第一款游戏。在 iOS 7.1 之前,一切都运行良好。现在,经过几次提升到一个新的水平并呈现一个新的Scene,它崩溃了。我不认为我以不正确的方式呈现它:

我收到一个EXC_BAD_ACCESS错误,看起来它正在发生removeSubsprite,但我在我的代码中找不到要删除子精灵的任何地方:

在此处输入图像描述

不确定要提供哪些其他信息,因为这只是我更新到 iOS 7.1 SDK 时似乎开始的一个晦涩错误。

0 投票
1 回答
2528 浏览

ios - 如何完全卸载 SpriteKit 场景

当我在游戏中点击重试按钮时,我希望它重新加载 MainScene。我正在这样做:

但是,这会导致每次重试时内存/CPU 使用率都会增加(很多)。大约重试 10-20 次后,会有明显的延迟。

我将我的所有 SKEmitterNode 和 SKSpriteNode 设为静态并修复了内存问题,所以我怀疑我的精灵、发射器等没有从内存中释放,并且每次重试时都会重新加载,使其翻倍。

我正在像这样加载精灵/发射器:

我是在加载精灵还是重试错误?

0 投票
1 回答
173 浏览

ios - 如何从 MenuScene 中的 SKNode 按钮调用排行榜

我收到以下警告:

不兼容的指针类型将“MenuScene”发送到“uiviewcontroller”类型的参数

我想通过单击菜单场景中的此按钮从 Game Center 调用排行榜。

在最后一条车道上,我收到了警告

0 投票
1 回答
536 浏览

sprite-kit - 在场景转换之前预卷带有 AVPlayer 的 SKVideoNode?

我正在使用AVPlayer一个SKVideoNode附加到场景的。那是唯一的节点SKScene。我正在播放该视频与一组加载了各种SKSpriteNode节点的其他场景混合在一起。

我想预先滚动,以便视频在过渡AVPlayer期间开始播放之前(或)它变得可见。SKScene然而,如果没有中间的黑色闪光,我似乎无法这样做。

就像包含视频的场景消失一样,我将其重置(我将 AVPlayer 对象填充到SKVideoNode的用户字典中)。这似乎有效:

当包含视频的场景即将出现时,我这样做:

然后...

如果不从视频前的短暂黑色开始,这将不起作用。

有人成功了吗?

我有一个令人难以忘怀的怀疑,a 上的所有内容SKScene在其过渡期间都被暂停,并且没有办法绕过它。好吧,除了过渡出当前场景的所有节点,保留当前场景,并SKVideoNode在其上过渡一个新节点。

0 投票
2 回答
3396 浏览

ios - 关闭 SKScene 后,内存仍然很高

我使用 dispatch_once NSObject来创建数据指针。所以所有的游戏资源指针都是在主视图控制器出现的时候生成的。为了玩游戏,用户在UIViewController上点击对应于特定级别的UIButton。让我称之为LevelSelectionController。游戏结束后,用户将点击一个标签 ( SKLabel )。并且所有动作和节点都将被删除。

此外,特定关卡的SKScene子类将返回用户到 LevelSelectionController 的任务委托给呈现游戏SKView的视图控制器,如下所示。

我唯一的问题是当用户离开游戏场景(SKScene)时内存仍然很高。游戏需要大量资产。所以当游戏开始时,内存使用会跳到 200 MB。当用户返回到原来的关卡选择视图控制器时,根据Activity Monitor,游戏模拟器仍在消耗 200 MB 。当用户进入不同的关卡时,内存使用量将再跳跃 10 MB。那么一旦用户离开SKScene,如何释放最后一场比赛的内存呢?

我正在使用ARC。Xcode 版本是 5.1。开发目标是iOS 7.1。

谢谢您的帮助。

-- 编辑 1 --

我很笨。我知道问题是什么。当我关闭场景时,我正在创建一个新的 SKView,然后我将其设置为 nil 以退出当前场景。有用。但这不应该是这样做的方式。相反,我需要在呈现它之前将当前的 SKView 设置为一个变量。当我关闭场景时,我需要将该变量设置为 nil。嗯……我没想到。

-- 编辑 2 -- 当前场景以 nil 呈现时几乎没有变化。从 removeFromSuperview 中删除它并没有多大作用。

0 投票
1 回答
102 浏览

ios - 如何在 Objective-C 的不同视图中共享本地变量

我现在正在制作休闲游戏。
我想在推特上分享分数。
我的这个工作图像如下。

1.玩家玩游戏后有得分。
2.当游戏进入gameoverscene时,他们可以推推特按钮(使用social.framework)
3.有这样的文字“你得到了xx分数!!” 在推特显示(模态)中。
*我想将 xx 更改为共享分数。

你能给我一些建议吗?我是Objective-C的初学者。所以,简单的方法对我来说更好。渐渐地,我想关注安全性和可扩展性。

[信息] *MainScene 和 GameOverScene 由 SKScene 制作

主场景.m

GameOverScene.m

视图控制器.m

0 投票
1 回答
500 浏览

sprite-kit - 如何在 SpriteKit 中调用更新方法?

我的 ViewController.h:

但我不知道如何调用更新方法。

0 投票
1 回答
1801 浏览

ios - 在 skscene 问题中暂停/播放

我有一个正在开发的演示游戏,并在场景中实现了暂停播放功能。这两个功能都可以正常工作。暂停将停止所有动作,播放将恢复除一个动作之外的动作。以下是我在触摸开始时实现暂停/播放功能的方式:

我还更新了更新方法中的时间,以便考虑当前时间并暂停操作正常工作。

这是僵尸动作方法:

我对这种方法的唯一问题是(正如我之前提到的)在按下播放按钮后移动僵尸的调用[self moveZombieToward:touchLocation];不起作用,所以在按下播放按钮后我不能再移动角色了。其他动画效果很好,但角色不再通过触摸移动。有人可以帮助了解我做错了什么吗?