问题标签 [skview]

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 投票
0 回答
811 浏览

ios - 定位具有 SKSceneScaleModeAspectFit 的 SKView / SKScene?

我正在使用带有 SKView 的基本设置来显示 SKScene。SKScene 具有预定义的大小并使用缩放模式 SKSceneScaleModeAspectFit:

正如预期的那样,在 iPhone 5 上,这会导致信箱,即我的场景上方和下方的黑色部分。在 iPad 上,信箱化会导致场景左右出现黑色条纹。

但是,我想定位场景,例如在 iPhone 5 上,以便场景与屏幕底部对齐,而所有黑色空间都位于场景上方。这可能吗?

我已经用 SKView/SKScene 的 .frame .center .origin 等属性尝试了很多东西,但似乎无法移动“显示区域”。例如,添加

在显示区域内移动场景的内容,而不是区域本身。

有任何想法吗?

0 投票
1 回答
111 浏览

ios7 - 暂停 iAd 请求问题

所以当我的视图控制器加载时,我开始发送广告横幅请求..

但是,即使我将 canDisplayBannerAds 设置为 NO,在为我的游戏启动场景时也会出现错误...我已经通过调试评论了错误开始的位置

错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIView 场景]:无法识别的选择器发送到实例 0x16d252a0”

问题是什么?我该如何解决这个问题?

0 投票
2 回答
666 浏览

ios - SKScene 难以将游戏结束任务委派给 UIViewController

我有两个 UIViewControllers。用户从UIViewController开始。然后用户点击一个按钮来玩游戏。因此应用程序继续切换到另一个视图控制器PlayViewController ,它显示了使用SKView进行的游戏。而ActionScene是负责游戏玩法的SKScene子类。当用户失败时,应用程序会显示一个标签(SKLabelNode)并询问他或她是否想退出游戏。如果用户点击这个标签,玩家将通过 PlayViewController 回到主视图控制器(UIViewController)。所以我认为 ActionScene 应该将此任务委托给 PlayViewController。以下来自ActionScene。

至于 PlayViewController,它负责将 ActionScene 呈现给 SKView,并将用户返回给 UIViewController,如下所示。

所以当用户点击 done 标签时,closeScene 被设计为启动。但是这个委托方法永远不会被调用。在过去的 9 个月里,我没有开发过 iOS 应用程序。但我认为我的想法是正确的。我究竟做错了什么?到目前为止,我已经阅读了这个主题这个主题和其他主题。

感谢您的帮助。

// 补充说明 //

  1. 在用户点击 doneLabel 之前,所有操作都会被删除。
  2. 游戏应用程序将进入 touchBegan。然而,它会跳过 [spriteView presentScene:scene] 行。
0 投票
4 回答
5749 浏览

ios - 无法设置 SKView 背景颜色

我有一个问题,即我的 SKView 的背景颜色(灰色)在呈现场景之前会短暂显示。

我通过 Storyboard 编辑器和我的控制器 ( ) 手动尝试设置它,self.skView.backgroundColor = [SKColor blueColor]但它仍然是灰色的。这不是可以覆盖的属性吗?

更新#1

以下是关于发生的事情的一些解释:

  1. viewDidLoad被调用并skView以灰色背景显示在屏幕上(skView.scene尚未设置)。
  2. 我加载了游戏的所有资源(大约需要 1 秒),此时灰色背景可见。
  3. 加载资产后,我加载场景并呈现它(灰屏被替换为场景的内容)

视图控制器

0 投票
2 回答
2341 浏览

ios - 将 UITextView 添加到 SpriteKit 中的场景

我试图创建一个游戏,并按照 Apple 的建议使用多个场景。您可以将游戏视为文本重点和点击冒险。

问题就在于此。大量文本,经过一番搜索,似乎是推荐的方式,或者说目前唯一的方法是UITextView这样:

如果您只有一个,这一切都很好SKScene,因为那是当前视图/SKView 正在显示的场景。

我的问题是,当我将文本添加到场景的 *view 中时,这不是应用程序加载的第一个场景(第三个或更高),应用程序跳回到它加载的第一个场景(这是我的菜单场景)并愉快地显示所需的文本。

有人知道为什么吗?我有菜单场景过渡到场景一,场景二(我希望在其中显示测试)。

如果我想在每个场景中显示多个单词,请不要说我需要每个场景的视图,这真的没有意义,但也许我对 SpriteKit 的使用也没有。

我还是有些惊呆了,居然没有SK等效的UITextView

无论如何,任何帮助,指针都会很棒,谢谢。

好的,这是代码的相关部分....我想。控制器:

其中GTMainMenu是 的子类SKScene,并且有一个按钮(橙色框)到“动作”( 的子类GTScene,本身是 的子类SKScene),这将导致到动作的转换,该动作有另一个按钮到第一个场景。只有您永远不会到达现场,因为viewDidLoad您会返回主菜单。

这是场景的 viewDidLoad,这将导致它“跳”回主菜单:

这里有一个 git repo 可用。

这是我项目的精简版本,删除了与手头问题无关的所有内容。

请原谅我的代码,我的日常工作是 Java,而我目前正在努力处理 Objective C 中的某些概念。哦,对不起,我设法包含了用户设置:S

0 投票
1 回答
1460 浏览

ios - SpriteKit - 如何正确暂停和恢复应用程序

我在使用 Games by Tutorials 书籍的帮助下制作的最新 iPhone 游戏遇到了很大的问题。

注意:来自SpriteKit 的方法 - 多任务的正确方法不起作用。

因此,在我的 ViewController.m 文件中,我定义了私有变量 SKView *_skView。

然后,我做这样的事情:

我定义了我的 _skView,一切正常。

但是,当我中断游戏时,它会将其状态重置为初始状态,因此,例如,如果我正在玩游戏,有人打电话给我,游戏会切换回主菜单。不可能是这样的。

基于我上面提到的网站,我创建了这个:

但是游戏一启动就崩溃,因为调用了第二种方法并且 SKView* 视图为零。从 self.window.rootViewController.view 获取它不起作用。

我也尝试从 self.window.rootViewController.view.subviews 获取它,但它也不起作用。

我不能像这样定义我的 SKView(在 ViewController.m 中):

因为那时我的 GameCenterController 出现错误。

有人可以帮助我如何正确获取实际的 skView 并正确暂停它吗?

0 投票
0 回答
132 浏览

uiview - SKView 正确调整大小以适合 3.5 英寸屏幕?

我有一个在 4 英寸和 3.5 英寸设备上看起来都很棒的 SKView。问题是在 3.5 英寸设备上,视图的底部被截断(就像连接到顶部一样)。我怎样才能让顶部(天空)被切断?这样 SKView 的底部就位于 3.5 英寸屏幕框架的底部。

谢谢!

更新:这是一个屏幕截图,可以更好地解释这种情况。

在此处输入图像描述

换句话说,在 3.5 英寸设备上,底部被剪掉了,但我宁愿把顶部剪掉。

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 回答
2528 浏览

ios - 如何完全卸载 SpriteKit 场景

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

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

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

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

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

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 中删除它并没有多大作用。