网站地图    收藏   

主页 > canvas引擎 > Phaser游戏引擎 >

phaser3 写怪物状态机,自动行走,判断玩家距离,自动攻击玩家,距离较远就回到原来位置

来源:未知    时间:2024-01-15 16:55 作者:小飞侠 阅读:

[导读] 在Phaser 3中实现一个怪物状态机,让怪物自动行走、判断玩家距离、攻击玩家并在距离较远时返回原始位置,你可以使用状态模式或者简单的条件判断来完成。以下是一个基本的示例:...

在Phaser 3中实现一个怪物状态机,让怪物自动行走、判断玩家距离、攻击玩家并在距离较远时返回原始位置,你可以使用状态模式或者简单的条件判断来完成。以下是一个基本的示例:

var config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    physics: {
        default: 'arcade',
        arcade: {
            gravity: { y: 0 },
            debug: false
        }
    },
    scene: {
        preload: preload,
        create: create,
        update: update
    }
};
var game = new Phaser.Game(config);
var player;
var monster;
var originalPosition;
var attackRange = 150;
var returning = false;
function preload() {
    this.load.image('player', 'path/to/player.png');
    this.load.image('monster', 'path/to/monster.png');
}
function create() {
    // 创建玩家和怪物
    player = this.physics.add.sprite(100, 300, 'player');
    monster = this.physics.add.sprite(700, 300, 'monster');
    // 设置原始位置
    originalPosition = { x: monster.x, y: monster.y };
    // 其他设置,如碰撞检测
    // ...
}
function update() {
    // 计算玩家和怪物之间的距离
    var distance = Phaser.Math.Distance.Between(player.x, player.y, monster.x, monster.y);
    if (!returning) {
        if (distance < attackRange) {
            // 玩家在攻击范围内,怪物攻击玩家
            attackPlayer();
        } else {
            // 玩家不在攻击范围内,怪物向玩家移动
            moveTowardsPlayer();
        }
    } else {
        // 怪物在返回原始位置
        returnToOriginalPosition();
    }
}
function attackPlayer() {
    // 在这里实现怪物攻击玩家的逻辑
    // ...
}
function moveTowardsPlayer() {
    // 简单的示例,怪物向玩家移动
    if (player.x < monster.x) {
        monster.setVelocityX(-50); // 向左移动
    } else {
        monster.setVelocityX(50); // 向右移动
    }
}
function returnToOriginalPosition() {
    // 怪物向原始位置移动
    var distanceToOriginal = Phaser.Math.Distance.Between(originalPosition.x, originalPosition.y, monster.x, monster.y);
    if (distanceToOriginal > 10) {
        if (originalPosition.x < monster.x) {
            monster.setVelocityX(-50); // 向左移动回到原始位置
        } else {
            monster.setVelocityX(50); // 向右移动回到原始位置
        }
    } else {
        // 怪物已经返回原始位置
        returning = false;
        monster.setVelocityX(0); // 停止移动
    }
}
// 触发怪物返回原始位置的方法
function triggerReturnToOriginal() {
    returning = true;
}



这个示例中,update 函数中的逻辑每帧都会执行。根据玩家和怪物的距离,怪物会决定是攻击玩家还是向玩家移动。当玩家离开攻击范围时,怪物会开始返回到最初的位置。你可以根据你的游戏逻辑和需求来修改怪物的移动、攻击行为以及距离的判断条件。


自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论