gpt4 book ai didi

ios - Swift:收集项目后运行功能

转载 作者:行者123 更新时间:2023-11-29 01:14:02 26 4
gpt4 key购买 nike

我有一个创建收藏品的类:

class CollectableCreate {

var collectable = SKSpriteNode()
var type = String()

var onCollect : () -> Void = {}

init(type: String, position: CGPoint, text: String = "This collectable uses no text!", onCollect : () -> Void) {

self.type = type.lowercaseString

switch self.type {

default:
collectable.size = CGSize(width: 1, height: 200)
collectable.color = SKColor.blueColor()
collectable.physicsBody = SKPhysicsBody(rectangleOfSize: collectable.size)
break
}

collectable.position = position

collectable.name = self.type
collectable.physicsBody?.categoryBitMask = PhysicsCategory.Collectable
collectable.physicsBody?.collisionBitMask = PhysicsCategory.Player
collectable.physicsBody?.contactTestBitMask = PhysicsCategory.Player


self.onCollect = onCollect
}


func chatBoxActivate() -> SKSpriteNode {
collectable.physicsBody?.dynamic = false
collectable.physicsBody?.affectedByGravity = false
return collectable
}

func collect() {
self.onCollect()
}

}

我创建这样的收藏品:

let d = CollectableCreate(type: "chatbox", position: CGPoint(x: 500, y: 100), onCollect: {
self.createChatBox("test blalb|blablalba")
})

self.addChild(d.chatBoxActivate())

在 didBeginContact 上我有这个:

if (firstBody.categoryBitMask == PhysicsCategory.Collectable || secondBody.categoryBitMask == PhysicsCategory.Collectable) {

let collectableBody = (firstBody.categoryBitMask == PhysicsCategory.Collectable ? firstBody.node : secondBody.node)
//collectableBody.collect() <---
collectableBody?.removeFromParent()

}

当我遇到可收集的内容时,我想运行CollectableCreate().collect()函数。我该如何实现这一点?

最佳答案

恐怕我是在黑暗中拍摄,因为我从未使用过 SpriteKit,所以请随时添加/或编辑我的答案。

你应该继承SKSpriteNode:

class Collectable : SKSpriteNode {

var type: String?
var onCollect: (() -> ())?

convenience init(type: String, position: CGPoint, text: String = "This collectable uses no text!", onCollect : () -> Void) {
self.init()

self.type = type.lowercaseString

switch self.type {

default:
self.size = CGSize(width: 1, height: 200)
self.color = SKColor.blueColor()
self.physicsBody = SKPhysicsBody(rectangleOfSize: self.size)
break
}

self.position = position

self.name = self.type
self.physicsBody?.categoryBitMask = PhysicsCategory.Collectable
self.physicsBody?.collisionBitMask = PhysicsCategory.Player
self.physicsBody?.contactTestBitMask = PhysicsCategory.Player


self.onCollect = onCollect
}

func chatBoxActivate() -> SKSpriteNode {
self.physicsBody?.dynamic = false
self.physicsBody?.affectedByGravity = false

return self
}

func collect(){
self.onCollect?()
}
}

并在下面的事情中使用它,并在 Controller 中添加您要子类化的任何类,并添加正确的委托(delegate):

class SomeClass {

func someFunc(){

let collectable = Collectable(type: "chatbox", position: CGPoint(x: 500, y: 100), onCollect: {
self.createChatBox("FooBar")
})

self.addChild(collectable.chatBoxActivate())
}

func didBeginContact(contact: SKPhysicsContact){

let firstBody = contact.bodyA
let secondBody = contact.bodyB

if (firstBody.categoryBitMask == PhysicsCategory.Collectable || secondBody.categoryBitMask == PhysicsCategory.Collectable) {

let collectableBody = firstBody.categoryBitMask == PhysicsCategory.Collectable ? firstBody.node : secondBody.node

if let collectable = collectableBody as? Collectable {
collectable.collect()
}

collectableBody?.removeFromParent()

}

}

func addChild(collectable: SKSpriteNode){
// Some logic
}

func createChatBox(text: String) {
// Some logic
}

}

希望这可以为您指明正确的方向!

SpriteKit Docs

关于ios - Swift:收集项目后运行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35433119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com