首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SpriteKit中制作移动障碍物

如何在SpriteKit中制作移动障碍物
EN

Stack Overflow用户
提问于 2017-09-28 00:39:58
回答 1查看 100关注 0票数 0

我刚刚完成了一个移动应用程序游戏的构建,现在我想尝试用游戏中的左右两个障碍物(在这个例子中是云)来动画移动。有什么建议吗?

代码语言:javascript
运行
复制
    func createClouds() -> [SKSpriteNode]{


    var clouds = [SKSpriteNode]();

    for _ in 0 ..< 2 {

        let cloud1 = SKSpriteNode(imageNamed: "Cloud 1")
        cloud1.name = "1"
        let cloud2 = SKSpriteNode(imageNamed: "Cloud 2")
        cloud2.name = "2"
        let cloud3 = SKSpriteNode(imageNamed: "Cloud 3")
        cloud3.name = "3"
        let darkCloud = SKSpriteNode(imageNamed: "Dark Cloud")
        darkCloud.name = "Dark Cloud"




        cloud1.xScale = 0.9
        cloud1.yScale = 0.9

        cloud2.xScale = 0.9
        cloud2.yScale = 0.9

        cloud3.xScale = 0.9
        cloud3.yScale = 0.9

        darkCloud.xScale = 0.9
        darkCloud.yScale = 0.9

        cloud1.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: cloud1.size.width - 5, height: cloud1.size.height - 6));
        cloud1.physicsBody?.affectedByGravity = false;
        cloud1.physicsBody?.restitution = 0;
        cloud1.physicsBody?.categoryBitMask = ColliderType.Cloud;
        cloud1.physicsBody?.collisionBitMask = ColliderType.Player;

        cloud2.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: cloud2.size.width - 5, height: cloud2.size.height - 6));
        cloud2.physicsBody?.affectedByGravity = false;
        cloud2.physicsBody?.restitution = 0;
        cloud2.physicsBody?.categoryBitMask = ColliderType.Cloud;
        cloud2.physicsBody?.collisionBitMask = ColliderType.Player;


        cloud3.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: cloud3.size.width - 5, height: cloud3.size.height - 6));
        cloud3.physicsBody?.affectedByGravity = false;
        cloud3.physicsBody?.restitution = 0;
        cloud3.physicsBody?.categoryBitMask = ColliderType.Cloud;
        cloud3.physicsBody?.collisionBitMask = ColliderType.Player;

        darkCloud.physicsBody = SKPhysicsBody(rectangleOf: darkCloud.size)
        darkCloud.physicsBody?.affectedByGravity = false;
        darkCloud.physicsBody?.categoryBitMask = ColliderType.DarkCloudAndCollectables;
        darkCloud.physicsBody?.collisionBitMask = ColliderType.Player;

        clouds.append(cloud1)
        clouds.append(cloud2)
        clouds.append(cloud3)
        clouds.append(darkCloud)

    }

    clouds = shuffle(cloudsArray: clouds);

    return clouds


}

func arrangeCloudsInScene(scene: SKScene, distanceBetweenClouds: CGFloat, center: CGFloat, minX: CGFloat, maxX: CGFloat, player: Player, initialClouds: Bool) {

    var clouds = createClouds()

    if initialClouds{

        while(clouds[0].name == "Dark Cloud") {
            clouds = shuffle(cloudsArray: clouds);

        }
    }


    var positionY = CGFloat();

    if initialClouds {
        positionY = center - 100;
    } else {
        positionY = lastCloudPositionY;
    }

    var random = 0;

    for i in 0...clouds.count - 1 {

        var randomX = CGFloat();

        if random == 0 {
            randomX = randomBetweenNumbers(firstNum: center + 90, secondNum: maxX);
            random = 1;
        } else if random == 1{
            randomX = randomBetweenNumbers(firstNum: center - 90, secondNum: minX)
            random = 0;
        }

        clouds[i].position = CGPoint(x: randomX, y: positionY);
        clouds[i].zPosition = 3;

        if !initialClouds {

            if Int(randomBetweenNumbers(firstNum: 0, secondNum: 7)) >= 3 {

                if clouds[i].name != "Dark Cloud" {
                    let collectable = collectableController.getCollectable();
                    collectable.position = CGPoint(x: clouds[i].position.x, y: clouds[i].position.y + 60);

                    scene.addChild(collectable);

                }

            }

        }

如果需要,我可以提供更多的代码示例,但我相信它对上面的示例有一定的意义。提前感谢大家!

EN

回答 1

Stack Overflow用户

发布于 2017-09-28 01:49:34

初学者步骤:

使用SKAction.moveToSKAction.sequenceSKAction.repeatForever移动云

前进一步:

GameplayKitAgentsGoals配合使用,允许您的云在路径中移动,从而使您可以灵活地选择云的移动方式

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46453090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档