When i shoot a node moving, it’s doens’t hurt the node, but shoot to old pos (spawn pos) of node, it’s hurt?.
- Collider2D in the same node with movement code.
import { _decorator, CCInteger, Component, Node, ProgressBar, Vec2, Vec3 } from 'cc';
import { EnemyManager } from './EnemyManager/EnemyManager';
const { ccclass, property } = _decorator;
@ccclass('EnemyController')
export class EnemyController extends Component {
@property(ProgressBar)
private hpBar: ProgressBar;
@property(CCInteger)
public maxHp: number;
@property(CCInteger)
public hp: number;
@property(CCInteger)
public atk: number;
@property(CCInteger)
public atkSpeed: number;
@property(CCInteger)
public moveSpeed: number;
start() {
this.moveSpeed = 200;
this.maxHp = 50;
this.refresh();
}
public refresh() {
this.hp = this.maxHp;
this.hpBar.progress = this.hp / this.maxHp;
this.moveEnemyToRandomPosition();
}
public onReceiveDamage(damage: number) {
this.hp -= damage;
this.hpBar.progress = this.hp / this.maxHp;
if (this.hp <= 0) {
this.node.active = false;
EnemyManager.getInstance().eventTarget.emit("onDie", this);
}
// console.log("-" + damage + " hp")
}
@property(Vec3)
private targetPosition: Vec3 = new Vec3();
getRandomFloat(min: number, max: number): number {
var rand = Math.random() * (max - min) + min;
console.log(rand);
return rand;
}
moveEnemyToRandomPosition(): void {
this.targetPosition.set(this.getRandomFloat(-1393.671, 1416.996), this.getRandomFloat(1061.29, -880.519), 0);
}
// Cập nhật di chuyển kẻ địch
update(dt: number): void {
// Tính khoảng cách còn lại
let distance = Vec3.distance(this.node.position, this.targetPosition);
// Nếu kẻ địch gần mục tiêu, gọi hàm random tiếp
if (distance <= 5) {
console.log("Set new move target of enemy")
this.moveEnemyToRandomPosition();
} else {
// Di chuyển kẻ địch
let x = this.targetPosition.clone();
let direction = x.subtract(this.node.position).normalize(); // Tính toán hướng
let moveAmount = this.moveSpeed * dt; // Tính toán khoảng di chuyển trong frame hiện tại
if (moveAmount > distance) {
moveAmount = distance; // Điều chỉnh để không đi qua mục tiêu
}
// Cập nhật vị trí
this.node.position = this.node.position.clone().add(direction.multiplyScalar(moveAmount));
}
}
}