我正在尝试使用applyImpulse使sprite跳转到特定高度.在下面的示例代码中,动态黑色圆圈跳转到与静态红色圆圈相同的高度,但它仅适用于kludge.
如果我的物理学是正确的,那么将射弹发射到高度Y所需的初始垂直动量由质量*sqrt(2*重力*Y)给出.然而,这个公式导致黑圈移动很少.
通过反复试验,我发现通过将脉冲矢量的垂直分量乘以12.3,我可以或多或少准确地使红色圆圈跳跃,如下面的代码所示.
这似乎是完全随意的,让我发疯.我显然做错了什么.这样做的正确方法是什么?
以下是我认为相关的代码:
let dy = mass * sqrt(
2 * -self.physicsWorld.gravity.dy
* (fixedCircle.position.y-jumpingCircle.position.y))
* 12.3
jumpingCircle.physicsBody?.applyImpulse(CGVectorMake(0, CGFloat(dy)))
Run Code Online (Sandbox Code Playgroud)
如果您希望复制和粘贴,这里是完整的GameScene.swift类...
import SpriteKit
class GameScene: SKScene {
var jumpingCircle = SKShapeNode()
var fixedCircle = SKShapeNode()
override func didMoveToView(view: SKView) {
self.scaleMode = .AspectFit
// Create an exterior physical boundary
self.physicsBody = SKPhysicsBody(edgeLoopFromRect:self.frame)
self.physicsWorld.gravity = CGVectorMake(0, -5);
// Create the jumping circle
jumpingCircle = SKShapeNode(circleOfRadius: 50)
jumpingCircle.position = CGPoint(x: 100,y: 0)
jumpingCircle.strokeColor = .blackColor()
jumpingCircle.physicsBody = SKPhysicsBody(circleOfRadius: 50)
jumpingCircle.physicsBody?.linearDamping = 0.0 …Run Code Online (Sandbox Code Playgroud) 似乎 SPLIT() 将空值视为根本不存在,这会产生意想不到的结果。
例如:
SELECT
NTH(3, SPLIT(values, ","))
FROM
(SELECT "a,b,,d,e" as values)
Run Code Online (Sandbox Code Playgroud)
返回“d”,当我希望它返回 NULL 时。您可以看到这对于多行逗号分隔的文本会有什么问题。人们会期望以下查询返回 NULL 和“c”,但它不会:
SELECT
NTH(3, SPLIT(values, ","))
FROM
(SELECT "a,b,,d,e" as values),
(SELECT "a,,c,d,e" as values)
Run Code Online (Sandbox Code Playgroud)
相反,它返回“d”和“d”。
这种行为是设计使然,可以改变,还是有更好的方法来做我正在做的事情?
出于安全目的,我希望能够审核谁在某个项目中运行了哪些类型的查询。这可能吗?
bq ls -j从命令行使用会提供一些信息;bg show -j多给一点。但既不显示用户也不显示查询本身。