我有一个关于通用游戏资产和in (iOS 8+)绝对定位的问题.SKNodesSprite Kit
我将通过以下示例尝试提出我的问题:
想象一下,一个2D自上而下的游戏用SKSpriteNode它代表的房子.一所房子有多个孩子SKSpriteNode,代表椅子,书桌,沙发等.
我有3个版本的房屋资产:
1x - 200 x 200px (非视网膜iPad),2x - 400 x 400px (Retina iPhone和iPad),3x - 600 x 600px (iPhone 6 Plus).重要:子节点(椅子,桌子等)位置在.plist文件中定义.像这样的东西(JSON表示):
children: [
{
position = {20,20};
},
...
]
Run Code Online (Sandbox Code Playgroud)
由于位置是以点而非像素定义的,因此根据设备屏幕比例,所有内容都会按预期定位.对于1x设备,位置保持不变{20,20},对于2x位置是{40,40},对于3x位置是{60,60}.
问题:
问题是,为了在所有设备上实现类似的外观和感觉200x200px,400x400px资产对于iPad设备来说是小的.
问题: …
我正在使用Swift以纵向模式为所有iOS设备创建通用游戏.在GameViewController中,我正在创建这样的场景:
let scene = GameScene(size:CGSize(width: 1536, height: 2048))
scene.scaleMode = .AspectFill
Run Code Online (Sandbox Code Playgroud)
背景图像的分辨率为1536x2048,因此在iPad上以scaleMode显示其全尺寸,在iPhone 6上显示1152x2048,侧面修剪.在所有设备上都可以正常工作,只需要一个背景图像.问题是,如果我调用size.width或self.frame.size.width,它总是返回1536,即使实际可见区域是例如1152.
如何设置SkSpriteNode相对于可见区域的位置,以便它例如从每个设备的角落50x50?
通常在精灵套件游戏中,当呈现新场景时,旧场景中的所有节点及其内容自动被移除.那么,如果不删除像"HUD"这样的节点呢?精灵套件中是否有任何方法只创建一个节点并在所有场景中使用它而不必每次在每个新场景中一次又一次地删除和创建它?必须有一种技术使其成为可能.这是一个严重的精灵套件设计问题,如果不可能的话.但我不这么认为.单例技术适用于音频播放器,它只创建一次并用于所有场景.有一种方法只能创建一个节点并在所有场景中使用它.谢谢你的想法.
我现在在Sprite-Kit场景中工作,我想将背景设置为名为"bgimage"的图像.我将如何通过gamescene.swift以编程方式执行此操作?
import UIKit
import SpriteKit
import CoreGraphics
class gameScene: SKScene {
}
Run Code Online (Sandbox Code Playgroud) 几乎每一个我见过的初学SpriteKit游戏制作教程,都会删除没有真正探索的GameScene.sks.
构建简单的非游戏应用程序是如此初学者友好的原因是因为故事板.
Ray在这里使用GameScene:
http://www.raywenderlich.com/84341/create-breakout-game-sprite-kit-swift
有没有理由不使用这个工具?当你把这个工具放在这里似乎可以简化它时,在代码中写出所有内容会更令人生畏.但如果最好这样做,我宁愿避免使用它.
提前致谢.