当前位置: 首页 > 知识库问答 >
问题:

斯威夫特:不制作物理物体的精灵碰撞检测?

爱炯
2023-03-14

好的,所以我对精灵工具包相当陌生,我在Swift中工作。我有2个精灵节点,saviorchicken1savior有一个物理体,这就是我设置它的方式:

var saviorTexture = SKTexture(imageNamed: "1.png")
saviorTexture.filteringMode = SKTextureFilteringMode.Nearest

savior = SKSpriteNode(texture: saviorTexture)
savior.setScale(0.2)
savior.position = CGPoint(x: self.frame.size.width * 0.5, y: self.frame.size.height * 0.2)
savior.physicsBody?.dynamic = true
savior.physicsBody?.allowsRotation = false
savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))

        self.addChild(savior)

chicken1目前没有物理实体:

var chickenTexture = SKTexture(imageNamed: "block1")

        chicken1 = SKSpriteNode(texture: chickenTexture)
        chicken1.setScale(0.75)
        chicken1.position = CGPoint(x: self.size.width * 0.38, y: self.size.height * 1.2)
        self.addChild(chicken1)

我需要知道如何在这些对象之间进行碰撞检测(即,如果救世主和小鸡接触,则执行此操作),最好不要使chicken1成为物理体。

当我把鸡做成一个物理物体时,它突然变得不稳定,并移动其他物体。

如果没有物理学就无法进行碰撞检测,我怎样才能使鸡肉1成为不受任何影响的物理体,并且直接穿过其他物理体?

编辑**************

所以我跟随初学者swift sprite kit -节点碰撞检测帮助(SKPhysicsContact)并拥有:

>

  • 将我的类更改为SK物理联系人代表

    类GameScene: SKScene, SK物理联系代表{

    写了以下内容:

        self.physicsWorld.contactDelegate = self
    
        savior.physicsBody?.categoryBitMask = saviorCategory
        savior.physicsBody?.contactTestBitMask = animalCategory
        savior.physicsBody?.collisionBitMask = 0
    
        chicken1.physicsBody?.categoryBitMask = animalCategory
        chicken1.physicsBody?.contactTestBitMask = saviorCategory
        chicken1.physicsBody?.collisionBitMask = 0
    
        func didBeginContact(contact: SKPhysicsContact) {
    
        var saviorPhysics: SKPhysicsBody
        var chicken1Physics: SKPhysicsBody
    
        if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask
        {
            saviorPhysics = contact.bodyA
            chicken1Physics = contact.bodyB
        }
        else {
            saviorPhysics = contact.bodyB
            chicken1Physics = contact.bodyA
        }
    
        if saviorPhysics.categoryBitMask == 0 && chicken1Physics.categoryBitMask == 1 {
            self.chicken1.removeFromParent()
        }
    
    }
    

    我运行了它,没有出现错误,但它不起作用。

  • 共有1个答案

    云季萌
    2023-03-14

    您可以使用categoryBitMask完成此操作,并通过响应SKSceneContactDelegate来自行处理冲突。

    这样你可以为不同的节点设置不同的类别,并随意处理不同类别之间的冲突。

    教程

    http://SEO DOA . com/2014/04/01/skphysicsbody-react-to-contact-but-to-collide/

     类似资料:
    • 我正在学习 Swift 为 iOS 创建一款游戏,但我正在努力弄清楚精灵将如何碰撞并与背景交互。 基本游戏将是一个球,你引导迷宫,但迷宫可以比屏幕大几倍。迷宫可以是一个大位图,或者由瓷砖组成,但我还没有根据如何使球与迷宫相互作用来决定。 我可以制作迷宫精灵节点中的所有方块,然后让SpriteKit完成,但我认为这不是一个好选择。 然后是SpriteKit边缘体,如图所示——https://deve

    • 我在雪碧套装里做一个复古街机游戏。我是这个框架的新手,所以我每分钟都发现新的东西,但很难解决这个问题,我在过去的几个小时里一直试图解决这个问题。 首先是游戏的屏幕转储和用红色勾勒出的物理实体。 http://i.imgur.com/KcbMVn4.png?1 当你按下拳击手套按钮时,大家伙通过这种方法进行拳击 } 我的碰撞代理如下所示 我这里的问题是,让didBeginContact记录命中的唯一

    • 当我尝试检测两个矩形之间的碰撞时当我启动程序时,它只打印“HIT”一次 我还尝试使用但出现此错误: 回溯(最近调用最后): 文件“D:/蟒蛇/PyCharm/test/src/Main/test.py”,第 104 行, 命中 = pygame.sprite.spritecollide(player_sprites,enemy_sprites,1) 文件“D:\程序\蟒蛇\lib\site-pac

    • 我想在我的玩家剑上创建一个碰撞体,如果他攻击,他会检测到,并通过动画事件关闭/打开一个名为(伤害点)的游戏对象,这是一个附加的脚本,可以减去敌人的生命值。但是在某个地方它不能正确检测到。我试图添加OnDrawGizmos函数来查看我的球体对撞机,但即使将其变大,它也无法检测到。 我的问题最奇怪的是,我对我的怪物箱子和我的幻想玩家使用相同的代码,但对箱子有效,但对玩家无效。 我创建了一个名为 Pla

    • 问题内容: 我主要专注于图形方面,以创建一些2DGame。我看过/看过几本教程,但是没有一部教程那么令人满意。我已经有一个玩家(一个正方形)在屏幕上移动并与其他正方形碰撞。重力等。 如果在屏幕上看到的对象太多(30 * 20),则一切正常。但是,如果我将其增加到300 * 300,则该程序开始运行非常慢,因为它必须检查许多对象。 我真的不知道Minecraft之类的游戏如何与ALL THOSE块一

    • 在开始学习相关知识点之前,我们有必要先学习精灵和碰撞检测的含义。 精灵(英文译为 Sprite),其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具、人物、场景装饰等,它们都可以看做成一张张小的“精灵”图。除此之外,人物的移动也可以看做是一系列小精灵图构成的序列(按帧组成的序列),如下图所示: 图1:动作逐帧分解图 如果将逐帧分解后的动作,按照一定的频率播放,那么就形成了