- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 SpriteKit 中的 SKPhysicsContactDelegate 函数,但它似乎不起作用。我希望一个 Sprite 在击中另一个 Sprite 时执行一个 Action 。我在 didBeginContact 函数中设置了断点,由于某种原因,我的应用程序从未调用此函数。感谢所有帮助。下面发布了代码。
struct PhysicsCatagory {
static let Enemy :UInt32 = 0x1 << 0
static let Slider :UInt32 = 0x1 << 1
static let Circle :UInt32 = 0x1 << 2
}
class GameScene: SKScene, SKPhysicsContactDelegate {
var EnemyTimer = NSTimer()
var Circle = SKSpriteNode()
var Slider = SKSpriteNode()
var FastButton = SKNode()
var Title = SKSpriteNode()
var Text = SKSpriteNode()
var Path = UIBezierPath()
var gameStarted = Bool()
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
self.backgroundColor = UIColor.whiteColor()
Circle = SKSpriteNode(imageNamed:"blueCircle")
Circle.size = CGSize(width: 140, height: 140)
Circle.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
Circle.zPosition = 1.0
self.addChild(Circle)
Slider = SKSpriteNode(imageNamed: "blocker1")
Slider.size = CGSize(width: 15, height: 50)
Slider.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 + 80)
addChild(Slider)
Slider.zPosition = 1.0
moveClockWise()
}
func didBeginContact(contact: SKPhysicsContact) {
if contact.bodyA.node != nil && contact.bodyB.node != nil{
let firstBody = contact.bodyA.node as! SKSpriteNode
let secondBody = contact.bodyB.node as! SKSpriteNode
if ((firstBody.name == "Enemy") && (secondBody.name == "Slider")){
collisionBall(firstBody, Slider: secondBody)
}
else if ((firstBody.name == "Slider") && (secondBody.name == "Enemy")) {
collisionBall(secondBody, Slider: firstBody)
}
}
}
func collisionBall(Enemy : SKSpriteNode, Slider : SKSpriteNode){
Enemy.physicsBody?.dynamic = true
Enemy.physicsBody?.affectedByGravity = true
Enemy.physicsBody?.mass = 4.0
Slider.physicsBody?.mass = 4.0
Enemy.removeAllActions()
Enemy.physicsBody?.contactTestBitMask = 0
Enemy.physicsBody?.collisionBitMask = 0
Enemy.name = nil
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
//Slider.hidden = false
FastButton.hidden = false
Title.hidden = true
Text.hidden = true
EnemyTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: #selector(GameScene.Enemies), userInfo: nil, repeats: true)
//Physics
Slider.physicsBody?.categoryBitMask = PhysicsCatagory.Slider
Slider.physicsBody?.collisionBitMask = PhysicsCatagory.Enemy
Slider.physicsBody?.contactTestBitMask = PhysicsCatagory.Enemy
Slider.name = "Slider"
Slider.physicsBody?.dynamic = true
Slider.physicsBody?.affectedByGravity = true
if gameStarted == false{
gameStarted = true
}
else if gameStarted == true{
}
}
func moveClockWise(){
let dx = Slider.position.x / 2
let dy = Slider.position.y / 2
let rad = atan2(dy, dx)
let Path = UIBezierPath(arcCenter: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2), radius: 90, startAngle: rad, endAngle: rad + CGFloat(M_PI * 4), clockwise: true)
let follow = SKAction.followPath(Path.CGPath, asOffset: false, orientToPath: true, speed: 150)
//let rotate = SKAction.rotateByAngle(75, duration: 100)
Slider.runAction(SKAction.repeatActionForever(follow).reversedAction())
//Slider.runAction(SKAction.repeatActionForever(rotate).reversedAction())
}
func Enemies(){
let Enemy = SKSpriteNode(imageNamed: "darkRedDot")
Enemy.size = CGSize(width: 20, height: 20)
//Physics
Enemy.physicsBody = SKPhysicsBody(circleOfRadius: Enemy.size.width / 2)
Enemy.physicsBody?.categoryBitMask = PhysicsCatagory.Enemy
Enemy.physicsBody?.contactTestBitMask = PhysicsCatagory.Slider //| PhysicsCatagory.Circle
Enemy.physicsBody?.collisionBitMask = PhysicsCatagory.Slider //| PhysicsCatagory.Circle
Enemy.physicsBody?.dynamic = true
Enemy.physicsBody?.affectedByGravity = false
Enemy.name = "Enemy"
最佳答案
接触尚未开始,因为您的 slider 没有物理体,因此无法识别接触。除非,这段代码中没有,你的 slider 没有物理体,但你的敌人有。尝试声明 Slider.phisicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "blocker1"), size: Slider.size)
此外,您应该阅读 Swift 中的标准命名约定。建议您的变量始终以小写字母开头(例如,enemyTimer
、circle
、slider
、fastButton
、等等...)。
关于swift - SKPhysics 触点无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37243989/
struct PhysicsCategory { static let None : UInt32 = 0 static let All : UInt32 = U
我正在尝试使用 SpriteKit 中的 SKPhysicsContactDelegate 函数,但它似乎不起作用。我希望一个 Sprite 在击中另一个 Sprite 时执行一个 Action 。我
Apple 的文档在解释如何有效地实现此类方法时含糊不清 + (SKPhysicsBody *)bodyWithBodies:(NSArray *)bodies; //the error that I
如何创建一个凹形的 SKPhysicsBody? 我的猜测是创建一个由多个凸体组成的复合节点。我可以用任何其他方式“粘贴”它们,从而在它们之间创建 SKPhysicsJointFixed 吗? 最佳答
我怎样才能分别从左向右滑动桨叶,让角色跳跃的桨叶停止,而其余的桨叶继续滑动?如何让4个桨以相同的速度慢慢地左右前后移动。请谢谢。 在这段代码中,我试图为所有这些创建一个 SKPhysics 实体,但我
在我被反对票钉在十字架上之前,让我说我已经对此进行了研究,但我仍然不明白为什么我会收到这个错误。 我有一个玩家试图防御的核心,您可以从中射出小激光来防御即将到来的 meteor 。好吧,我已经设置好了
代码如下: import SpriteKit import CoreMotion struct PhysicsCatagory { static let Player :UInt32 = 0
所以我正在创建一个游戏,我只想检测玩家节点和敌人发射的子弹之间的碰撞。所以我已经为每个玩家和子弹设置了正确的参数和 categoryBitMask 和 contactTestBitMask。 通过实现
我一直在尝试使用 sprite 套件,为我的想法构建原型(prototype)。我一直在使用 SKPhysicsJointPin 将一串物理体连接在一起,以制作一根绳子(实际上更像是自行车链条,但它已
尝试在 SpriteKit 中使用径向重力场时遇到问题 我不希望同类对象(由categoryBitMask定义)相互吸引 这是我的做法: struct PhyscisCategory { st
随着 iOS 8 的发布苹果也发布了新的 swift。购买他们还发布了 Sprite 套件的一些更新。其中之一是每像素物理体。我试图找到如何在 xcode beta 中实现这个每像素物理体,并且在搜索
我正在创建一个游戏,对于我的角色,他的腿和躯干有单独的动画,因此它们是具有单独物理体的单独节点。我在将躯干和腿连接在一起时遇到了很多麻烦,但是,将它们连接起来不是问题,让它们保持连接才是问题。在四处走
想要使用 SKPhysics(启用碰撞)拖动 SKSpriteNode(跟随您的手指移动) 2 失败的解决方案: 1) a) 解决方案:改变SKSpriteNode的位置 b) 问题:当用户拖动 sp
我正在尝试为 iPad Pro 12.9 创建物理边界 我是这样做的: override func didMove(to view: SKView) { physicsWorld.co
我是一名优秀的程序员,十分优秀!