我正在深入研究Apples SpriteKit和GameplayKit示例代码,并发现了一个名为'DemoBots'的项目,用Swift编写.在项目中使用了一些非常有趣的概念,我想要适应我的项目.
我已经在将碰撞处理封装到一个处理程序类中,这与在该示例代码中处理碰撞的方式非常相似.
在这个项目中,我找到了一个名为的结构的代码RPColliderType:
struct RPColliderType: OptionSetType, Hashable, CustomDebugStringConvertible {
// MARK: Static properties
/// A dictionary to specify which `ColliderType`s should be notified of contacts with other `ColliderType`s.
static var requestedContactNotifications = [RPColliderType: [RPColliderType]]()
/// A dictionary of which `ColliderType`s should collide with other `ColliderType`s.
static var definedCollisions = [RPColliderType: [RPColliderType]]()
// MARK: Properties
let rawValue: UInt32
// MARK: Options
static var Obstacle: RPColliderType { return self.init(rawValue: 1 << 0) }
static var PlayerBot: RPColliderType { return …Run Code Online (Sandbox Code Playgroud) 我正在学习Swift,作为一个项目,我正在开发一个类似于超级马里奥的基于平铺的2D游戏,我的角色会走路并跳上瓷砖.
最新版本的Xcode和Sprite Kit可以直接在Xcode中创建Tile Map.
在新的Xcode和Sprite工具包的演示中,这个人展示了一个类似于我正在做的游戏.
https://developer.apple.com/videos/play/wwdc2016/610/ (大约20分钟).
他提到我给Tiles用户数据属性,并且在代码中我们搜索具有该用户数据的所有tile并给它们一些物理属性,以便角色可以碰撞或与它们交互(在我的情况下,我的角色不会掉落)或者穿过瓷砖).
所以基本上,这个想法是给那些瓦片一个物理体,但这不能用SKphysicsBody来完成.所以必须有另一种方式,因为我是Swift的新手,我很想念它.
如果有人知道这一点,我将非常感谢帮助.
如果问题不清楚,请告诉我,因为我也是堆栈溢出的新手.
来自Apple的Swift Book有一个使用元音作为案例的开关示例.
题. 而不是有这个元音列表,是否可以使用包含此内容的数组?如果是这样,这样做的语法是什么?
〜来自Apple Swift Book~
以下示例从小写字符串中删除所有元音和空格,以创建一个神秘的拼图短语:
let puzzleInput = "great minds think alike"
var puzzleOutput = ""
for character in puzzleInput.characters {
switch character {
case "a", "e", "i", "o", "u", " ":
continue
default:
puzzleOutput.append(character)
}
}
print(puzzleOutput)
// Prints "grtmndsthnklk"
Run Code Online (Sandbox Code Playgroud) 当试图从a中删除后缀时filename,我只留下后缀,这正是我想要的.
我做错了什么(有多少事):
let myTextureAtlas = SKTextureAtlas(named: "demoArt")
let filename = (myTextureAtlas.textureNames.first?.characters.split{$0 == "."}.map(String.init)[1].replacingOccurrences(of: "\'", with: ""))! as String
print(filename)
Run Code Online (Sandbox Code Playgroud)
这打印png出的是整件事中最无聊的部分.
A SKSpriteNode有一个父母,该父母是随机分配的,并且不知道是谁。
如何SKSpriteNode找到它的父级,然后从场景中删除父级,从而删除自身和父级?
我想用一个非常简单的元组作为关键:
(Int, Int)
Run Code Online (Sandbox Code Playgroud)
字典键需要是Hashable.我学到了
但是找不到我如何使这个简单的元组Hashable,并且最好在协议一致性方面做斗争.
更深刻的是,CGPoint可以解决我的问题.它可以是这种格式,但不可清除.
是否可以扩展CGPoint以便它可以清洗?如果是这样,怎么样?
编辑:CGPoint选择的Int变体的图像.
文档:
暂停()
创建一个告诉音频节点暂停播放的操作。
声明类 funpause() -> SKAction
此操作只能在 SKAudioNode 对象上执行。音频已暂停,如果重新启动,则会在暂停处恢复。此操作不可逆转。
请原谅我的无知,我只是不知道如何使用它来暂停SKAudioNode,所以没有尝试任何代码,并且没有代码可显示,因为我不知道如何使用它,并找到了这个准系统文档太轻了。
我在MagicaVoxel中创建了一些体素对象,这是一个用于创建体素模型的程序.我完成了一个.它的出口选项如下:
obj,ply,mc,2d,iso,slab,xraw,qb
我应该选择哪种文件格式,然后如何将其导入到SceneKit游戏项目中?
每当我在动作上使用尾随闭包时......示例:
run(SKAction.wait(forDuration: 10)){timeRemains = false}
Run Code Online (Sandbox Code Playgroud)
我看到这个:
对闭包中的属性(任何东西)的引用需要明确的 'self' 以明确捕获语义。
这是什么意思?它是关于什么的?我很好奇,因为我只在我想在尾随闭包中调用的属性或函数的上下文/范围内这样做,所以不知道为什么我需要 `self 并且对这个词的使用着迷
“语义”
这里。它是否具有某种深刻的含义,如果我理解了这一点,我会神奇地理解闭包吗?
在一个应该加载一个场景的按钮中,我试图学习使用aa guard语句,但是它在四个"逃脱"中的每一个中都做了很多的困惑.并且不知道在处理没有场景的情况时我应该做些什么.
这是正确的用在这里: continue,return,break或throw?
而且......为什么?
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches {
let location = touch.location(in: self)
if self.rr.contains(location) {
guard let nextScene = goesTo
else {print(" No such Scene ")
continue } // continue, return, break, throw !!!!????
loadScene(withIdentifier: nextScene)
}
}
}
Run Code Online (Sandbox Code Playgroud) swift ×8
sprite-kit ×5
arrays ×1
audio ×1
bit-masks ×1
closures ×1
dictionary ×1
gameplay-kit ×1
hashable ×1
ios ×1
parent ×1
protocols ×1
scenekit ×1
scope ×1
skaudionode ×1
skscene ×1
skspritenode ×1
split ×1
string ×1
suffix ×1
syntax ×1
voxel ×1
xcode ×1