从旋转体射击

2024-04-09

我有一个旋转的敌人身体,可以发射子弹。它工作得相当不错,但它似乎会向所有方向射击,除了垂直向下。我已经有一段时间没有学三角函数了,我想我忘记了一些事情。我必须检查敌人的轮换吗?

        SKAction *shoot = [SKAction moveTo:CGPointMake(2000*cosf(enemy.zRotation),2000*sinf(enemy.zRotation)) duration:5];
        SKAction *remove = [SKAction removeFromParent];

        [bullet runAction:[SKAction sequence:@[shoot,remove]]];

下面是一艘可以 360 度旋转并从任何角度开火的船的代码。触摸屏幕左侧可轻微旋转飞船,触摸屏幕右侧可进行射击。

@implementation MyScene
{
    SKSpriteNode *ship1;
    SKShapeNode *beam1;
}

-(id)initWithSize:(CGSize)size 
{
    if (self = [super initWithSize:size])
    {
        //self.physicsWorld.contactDelegate = self;
        [self createSpaceships];
    }
    return self;
}


-(void)createSpaceships 
{
    ship1 = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(50, 50)];
    ship1.position = CGPointMake(300, 150);
    ship1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:ship1.size];
    ship1.physicsBody.dynamic = NO;
    [self addChild:ship1];

    SKSpriteNode *frontOfShip = [SKSpriteNode spriteNodeWithColor:[SKColor grayColor] size:CGSizeMake(2, 50)];
    frontOfShip.position = CGPointMake(25, 0);
    [ship1 addChild:frontOfShip];
}

// touch the left side of the screen to rotate the ship by +0.0785398 radians
// touch the right hand side of the screen to fire laser

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInNode:self.scene];

    if(touchLocation.x < self.size.width/2) // left side of screen
    {
        SKAction *block0 = [SKAction runBlock:^{
            ship1.zRotation = ship1.zRotation +0.0785398;
        }];
        [self runAction:block0];
    } else // right side of screen
    {
        int x = ship1.position.x + 1000 * cos(ship1.zRotation);
        int y = ship1.position.y + 1000 * sin(ship1.zRotation);

        beam1 = [SKShapeNode node];
        CGMutablePathRef pathToDraw = CGPathCreateMutable();
        CGPathMoveToPoint(pathToDraw, NULL, ship1.position.x, ship1.position.y);
        CGPathAddLineToPoint(pathToDraw, NULL, x, y);
        beam1.path = pathToDraw;
        [beam1 setStrokeColor:[UIColor redColor]];
        [self addChild:beam1];
    }
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    //[beam1 removeFromParent];
}

-(void)update:(CFTimeInterval)currentTime
{
    //
}

@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从旋转体射击 的相关文章

  • SpriteKit 粒子发射器未出现在 Xcode 编辑器中

    我经常遇到粒子效果未出现在编辑器中的问题 当我第一次创建它们时 一切正常 但一段时间后它们就不再出现 我只看到黑色背景 但不存在粒子 我能够处理这个问题的唯一方法是删除节点并创建一个具有相同属性的新粒子节点 这是耗时且烦人的 然后 过了一段
  • SpriteKit SKPhysicsBody 在一个方向上的碰撞就像一扇只能穿过不能返回的门

    在 SpriteKit SKPhysicsBody 中 是否可以有一个可以穿过但不能返回的对象 这个想法是 它们不会在一个方向上发生碰撞 因此你可以穿过而不会返回 就像活板门一样 我不太确定物理是否可行 但您应该能够在游戏运行时扰乱物理体的
  • 通用2D游戏资产和绝对节点定位

    我有一个关于通用游戏资产 and 绝对定位 of a SKNodes in Sprite Kit iOS 8 我将尝试通过如下示例来展示我的问题 想象一个2D自上而下游戏 with a SKSpriteNode它代表一座房子 一个房子有多个
  • 如何模糊除 2 个节点之外的所有内容。雪碧 (Swift)

    我想模糊我的游戏背景 self view scene paused true 但是按钮和暂停的标签 都是 SKSpriteNode 的 不应该是模糊的 它们都有不同的 Z index 值 按下按钮节点时场景暂停 再次按下按钮时场景恢复 我找
  • 如何获取通过SpriteKit编辑器创建的项目的SKSpriteNode?

    我使用 SpriteKit 使用 Objective C 在 XCode 中创建了一个相当简单的 此时是实验性的 游戏 我知道如何手动创建 SKSpriteNode 对象并将其添加到 SKScene 但我有点尝试做相反的事情 我在 XCod
  • watchOS 3 SpriteKit 中的触摸事件?

    在watchOS 3中使用SpriteKit时 如何处理触摸事件 我正在从 iOS 移植 SpriteKit 游戏 下面的代码不起作用 或者你必须以某种方式控制 WKInterfaceController override func tou
  • Sprite Kit 物理碰撞问题

    我遇到了一些碰撞问题 我有两个大小和质量相同的物体 当一个物体与另一个静止物体碰撞时 我会得到正确的行为 图像中的灰色区域 当我有两个彼此相邻的对象时 行为不太正确 Spritekit 结果在左侧 右侧是预期 需要的结果 我想我知道发生了什
  • 尝试添加已经有父级错误的 SKNode

    我在尝试运行我的游戏时收到错误 尝试添加已有父节点的 SKNode 如果我将 SKSpriteNode 在本地添加到函数中 它就可以正常运行 但是当我尝试在全球范围内声明它时 我收到了该错误 任何解决此错误的帮助都会很棒 我认为这与self
  • SpriteKit SKScene 添加 AVCaptureVideoPreviewLayer CALayer 作为背景不起作用

    我正在尝试将 AVCaptureVideoPreviewLayer CALayer 添加为 SKScene 的背景 我可以将 CALayer 添加到场景中 但无论尝试如何排序 CALayer 始终是最顶层的对象 在 didMoveToVie
  • SpriteKit 中的攻击按钮

    我对 Xcode 有点陌生 一直在为我的班级制作 2d 游戏 我已经有一段时间遇到按钮问题了 我刚刚找到了为什么我的跳跃按钮不起作用的解决方案 但我还有一个攻击按钮 我设置了代码 使按钮显示在屏幕上并在按下时更改其图像 但是 我不知道要放入
  • 如何快速更改 SKSpriteNode 的颜色?

    我创建了一个游戏SKSpriteNode那是黑色的 当用户触摸屏幕时我想要SKSpriteNode更改为白色 我已经用谷歌搜索了一切 并尝试了很多不同的策略 但没有成功 有谁知道如何做到这一点 这是我的场景的代码 var blackBird
  • 使用 SceneKit 实现 ARKit 广告牌效果

    我希望添加与此应用程序类似的广告牌效果 https twitter com marpi status 897130955105644544 https twitter com marpi status 897130955105644544
  • SpriteKit 碰撞检测中 SKSpriteNode 之间的间隙

    我已经尝试解决这个问题很长一段时间了 我有一个具有简单平台物理原理的游戏 其中玩家跌倒在一个方块上 这可以阻止他跌倒 这是可行的 但是玩家停止的位置和实际对象 精灵节点的位置之间存在明显的差距 这是一个屏幕截图 它应该是不言自明的 clas
  • 如何在 Swift 中使用 deltaTime 正确计算 1 秒

    我正在尝试计算经过的秒数deltaTime但我不知道该怎么做 因为我的deltaTime不断打印 0 0166 或 0 0167 这是我的代码 override func update currentTime CFTimeInterval
  • SKLightNode 无法在真实设备上工作 [iPhone 5]

    我建立了一个简约的项目here http override apps com wp content uploads iOS8 Test zip它只是添加一个红色方块 然后点击屏幕后 一个光源照亮它 在模拟器上它运行良好 但在我的 iPhon
  • iOS SKSpriteNode - 离开屏幕

    有什么方法可以从父级中删除具有左区域边界的 SKSpriteNode 吗 例如 void didBeginContact SKPhysicsContact contact firstNode SKSpriteNode contact bod
  • 使用 Swift 创建 SKSpriteNode 子类

    我正在尝试创建作为 SKSpriteNode 子类的类 并且我想向其添加其他属性和函数 但在第一步中我遇到了错误 这是我的代码 import SpriteKit class Ball SKSpriteNode init super init
  • 有没有办法反转 SKSpriteNode 的颜色

    我想知道是否可以反转 SKSpriteNode 的颜色 或调整色调 您可以通过应用带有 SKEffect 节点的 CIFilter 来反转颜色 像这样的东西应该有效 SKEffectNode effectNode SKEffectNode
  • 将 Spritekit 游戏转换为 Android?

    是否有任何新选项可以将 spritekit 游戏转换为 Android 游戏 似乎唯一的选择是用 Java 重新编码所有内容或使用 Cocos2D LibGDX 等 很不幸的是 不行 而且带有 Apportable 服务的跨平台 Sprit
  • Swift SpriteKit edgeLoopF​​romRect 问题

    下面的代码可以识别底部和顶部边缘场景和球按预期弹开 但是 那左边缘和右边缘现场的情况一直被破坏 如果施加足够的力 球会离开屏幕 然后最终返回 就好像场景的边缘超出了 iPhone 模拟器窗口的边缘 import SpriteKit clas

随机推荐