下面是我的"Floor.swift"课程,下面基本上是一堆墙.我有来自屏幕顶部的对象,一旦Floor和SKSpriteNodes发生碰撞,我希望删除SKSpriteNode.以下是我的楼层课程.
import Foundation
import SpriteKit
class Floor: SKNode {
override init() {
super.init()
let leftWall = SKSpriteNode(color: UIColor.clear, size: CGSize(width: 5, height: 50))
leftWall.position = CGPoint(x: 0, y: 50)
leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size)
leftWall.physicsBody!.isDynamic = false
self.addChild(leftWall)
let rightWall = SKSpriteNode(color: UIColor.clear, size: CGSize(width: 5, height: 50))
rightWall.position = CGPoint(x: 375, y: 50)
rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size)
rightWall.physicsBody!.isDynamic = false
self.addChild(rightWall)
let bottomWall = SKSpriteNode(color: UIColor.clear, size: CGSize(width: 500, height: 10))
bottomWall.position = CGPoint(x: 150, y: -5)
bottomWall.physicsBody = SKPhysicsBody(rectangleOf: …Run Code Online (Sandbox Code Playgroud) 我花了很多时间研究和使用不同的代码来完成这项工作,但似乎无法弄清楚。下面您将看到两段代码,其中一段代码创建“完成”栏按钮项,另一段代码检查键盘是否存在并在单击按钮时将其关闭。我遇到的一个问题是,我只希望在键盘存在时显示条形按钮。我希望在键盘消失后或什至在首先打开键盘之前隐藏条形按钮。你现在如何用 SwiftUI 做到这一点?
.navigationBarItems(trailing:
Button(action: {
if UIApplication.shared.isKeyboardPresented {
UIApplication.shared.endEditing()
}
}, label: {
Text("Done")
})
extension UIApplication {
func endEditing() {
sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
/// Checks if view hierarchy of application contains `UIRemoteKeyboardWindow` if it does, keyboard is presented
var isKeyboardPresented: Bool {
if let keyboardWindowClass = NSClassFromString("UIRemoteKeyboardWindow"),
self.windows.contains(where: { $0.isKind(of: keyboardWindowClass) }) {
return true
} else {
return false
}
}
}
Run Code Online (Sandbox Code Playgroud) 我在下面有一个名为"Floor"的单独课程.
class Floor: SKNode {
override init() {
super.init()
//let edgeFrame = CGRect(origin: CGPoint(x: 1,y: 1), size: CGSize(width: 1078, height: 1950))
//self.physicsBody = SKPhysicsBody(edgeLoopFrom: edgeFrame)
let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame)
borderBody.friction = 0
self.physicsBody = borderBody
// Apply a physics body to the node
// self.physicsBody?.isDynamic = false
// Set the bit mask properties
self.physicsBody?.categoryBitMask = floorCategory
self.physicsBody?.contactTestBitMask = nailDropCategory
self.physicsBody?.collisionBitMask = balloonCategory
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemted")
}
}
Run Code Online (Sandbox Code Playgroud)
我基本上已经下降了SKSpriteNode,它从屏幕顶部开始,然后到达触及"Floor"的底部并移除自身,然后再次从顶部重新开始.我遇到的问题是我的所有SKSpriteNode一直卡在最顶层而不是掉落在屏幕边框周围.如何告诉我的应用程序忽略这些特定节点并让它们进入?感谢任何帮助!
这是在屏幕上左右移动的对象,但它只是在没有edgeLoop的情况下从屏幕的一侧掉落
if let …Run Code Online (Sandbox Code Playgroud)