gpt4 book ai didi

swift - 获取特定区域的节点列表?

转载 作者:搜寻专家 更新时间:2023-10-30 22:15:35 25 4
gpt4 key购买 nike

我正在玩一款横盘游戏,我需要知道某个区域中有哪些节点才能实现“视线”之类的功能。现在,我正在尝试使用 enumerateBodyiesInRect(),但它检测的物体距离评估的矩形有 20 像素或更多,我无法弄清楚为什么它如此不精确。

这就是我现在正在尝试的:

import SpriteKit
import CoreMotion

class GameScene: SKScene, SKPhysicsContactDelegate
{
var player = SKShapeNode()
var world = SKShapeNode()
var rShape = SKShapeNode()

override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
self.scaleMode = SKSceneScaleMode.AspectFit
self.size = view.bounds.size

// Add world
world = SKShapeNode(rectOfSize: view.bounds.size)
world.physicsBody = SKPhysicsBody(edgeLoopFromPath: world.path)
world.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2) // Move camera
self.addChild(world)

// Add player
player = SKShapeNode(rectOfSize: CGSize(width: 25, height: 25))
player.physicsBody = SKPhysicsBody(rectangleOfSize: player.frame.size)
player.physicsBody.dynamic = false
player.strokeColor = SKColor.blueColor()
player.fillColor = SKColor.blueColor()
player.position = CGPointMake(90, -50)
world.addChild(player)
}


override func update(currentTime: CFTimeInterval) {
// Define rect position and size (area that will be evaluated for bodies)
var r : CGRect = CGRect(x: 200, y: 200, width: 25, height: 25)

// Show rect for debug
rShape.removeFromParent()
rShape = SKShapeNode(rect: r)
rShape.strokeColor = SKColor.redColor()
self.addChild(rShape)

// Evaluate rect
rShape.fillColor = SKColor.clearColor()
self.physicsWorld.enumerateBodiesInRect(r) {
(body: SKPhysicsBody!, stop: UnsafePointer<ObjCBool>) in
self.rShape.fillColor = SKColor.redColor() // Paint the area blue if it detects a node
}
}
}

此代码应在屏幕上显示评估的矩形和射线(用于调试目的),并在它们接触玩家节点时将它们涂成红色。但是,您可以在屏幕截图中看到,当玩家距离它 25 像素或更远时,它是如何变成红色的,这就像绘图有点偏离,或者小于正在评估的实际区域。您可以将其复制粘贴到项目以重现该问题。

这可能是因为这只是测试版还是我做错了什么?

The rect should only be red only if the player is inside it (blue square), however it's red when the player is near

最佳答案

您正在创建一个物理世界,其中有一个具有“特殊属性”的特定矩形 - 这是您在 enumerateBodiesInRect() 中使用的矩形。为什么不创建一个不可见的、具有所需矩形尺寸的惰性物理体,然后使用 SKPhysicsBody 检查碰撞和/或接触?然后,您可以使用 allContactedBodies() 或一些委托(delegate)回调来了解您的特殊矩形内还有哪些其他物体。

可以把它想象成“牵引光束”或“变形矩形”。

关于swift - 获取特定区域的节点列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24851309/

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