【问题标题】:Sprite Kit - Apply Impulse to shoot projectile at characterSprite Kit - 应用 Impulse 向角色射击弹丸
【发布时间】:2014-10-14 15:47:55
【问题描述】:

我正在使用 Sprite-Kit (Objective-C) 开发游戏。这是一个游戏,您可以控制飞行中的小鸟,然后从屏幕的右侧/顶部/底部向您发射箭头和其他不良射弹。我正在使用物理而不是 SKAction 来完成此操作,因为我希望它看起来尽可能逼真。所以我知道在射弹上使用 applyImpulse 将其射向鸟,但我想知道的是如何保证射弹将直接射向鸟,无论鸟的 y 定位和 y 定位applyImpulse 之前的弹丸?

我在完成这项工作时遇到了非常令人沮丧的事情,因此我们将不胜感激任何有关此事的帮助。谢谢。

【问题讨论】:

    标签: ios objective-c xcode sprite-kit skphysicsbody


    【解决方案1】:

    基本步骤是

    1. 计算从射弹发射器到鸟的矢量分量
    2. 规范化组件(可选)
    3. 通过缩放(标准化)分量创建向量
    4. 使用矢量向射弹施加脉冲

    这是一个如何做到这一点的示例

    Obj-C

    // Calculate vector components x and y
    CGFloat dx = bird.position.x - launcher.position.x;
    CGFloat dy = bird.position.y - launcher.position.y;
    
    // Normalize the components
    CGFloat magnitude = sqrt(dx*dx+dy*dy);
    dx /= magnitude;
    dy /= magnitude;
    
    // Create a vector in the direction of the bird
    CGVector vector = CGVectorMake(strength*dx, strength*dy);
    
    // Apply impulse
    [projectile.physicsBody applyImpulse:vector];
    

    斯威夫特

    // Calculate vector components x and y
    var dx = bird.position.x - launcher.position.x
    var dy = bird.position.y - launcher.position.y
    
    // Normalize the components
    let magnitude = sqrt(dx*dx+dy*dy)
    dx /= magnitude
    dy /= magnitude
    
    // Create a vector in the direction of the bird
    let vector = CGVector(dx:strength*dx, dy:strength*dy)
    
    // Apply impulse
    projectile.physicsBody?.applyImpulse(vector)
    

    【讨论】:

    • 我怎样才能保证弹丸的速度总是一样的?
    • 如果强度相同,速度应该相同。这就是我对向量的分量进行归一化的原因。
    • @0x141E 没问题,感谢这个有用的答案。
    • @0x141E 如何计算脉冲的确切强度?当 Bird 与 Platform 碰撞时,我使用 Platform 上的 applyImpulse 来跳鸟。但跳跃的高度不是一成不变的。我的触摸效果是冲动吗?
    • @Raksha 这是为了向目标(例如鸟)发射子弹而不是让角色跳跃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多