mirror of
http://junepve.top:3000/chicrobot/CINC.git
synced 2026-10-29 21:21:29 +08:00
feat(FTS) 新增种田系统
This commit is contained in:
1 parent
f6874d1ee9
commit
ce4e04740a
8 files changed
+933
-2
No files matched your search
+161
@@ -0,0 +1,161 @@
|
||||
// 作物类:表示游戏中的农作物
|
||||
|
||||
export default class Crop extends Phaser.GameObjects.Sprite {
|
||||
constructor(scene, x, y, cropType, growthTime) {
|
||||
super(scene, x, y, 'crop');
|
||||
|
||||
// 设置作物属性
|
||||
this.cropType = cropType;
|
||||
this.growthTime = growthTime; // 生长时间(毫秒)
|
||||
this.plantedTime = Date.now();
|
||||
this.isHarvestable = false;
|
||||
this.growthStage = 0; // 0: 种子, 1: 幼苗, 2: 成长中, 3: 成熟
|
||||
|
||||
// 创建作物纹理
|
||||
this.createCropTexture();
|
||||
|
||||
// 添加到场景
|
||||
scene.add.existing(this);
|
||||
|
||||
// 设置碰撞体
|
||||
this.setSize(16, 16);
|
||||
|
||||
// 设置交互性
|
||||
this.setInteractive({
|
||||
useHandCursor: true
|
||||
});
|
||||
|
||||
// 绑定点击事件
|
||||
this.on('pointerdown', () => {
|
||||
this.onCropClicked();
|
||||
});
|
||||
|
||||
// 开始生长计时器
|
||||
this.startGrowthTimer();
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建作物纹理
|
||||
*/
|
||||
createCropTexture() {
|
||||
// 根据作物类型和生长阶段创建不同的纹理
|
||||
const textureKey = `${this.cropType}_${this.growthStage}`;
|
||||
|
||||
if (!this.scene.textures.exists(textureKey)) {
|
||||
const canvas = document.createElement('canvas');
|
||||
canvas.width = 16;
|
||||
canvas.height = 16;
|
||||
const ctx = canvas.getContext('2d');
|
||||
|
||||
// 根据作物类型设置基础颜色
|
||||
let baseColor;
|
||||
switch (this.cropType) {
|
||||
case 'wheat':
|
||||
baseColor = '#FFFF00'; // 黄色
|
||||
break;
|
||||
case 'carrot':
|
||||
baseColor = '#FF6B35'; // 橙色
|
||||
break;
|
||||
default:
|
||||
baseColor = '#00FF00'; // 绿色
|
||||
}
|
||||
|
||||
// 根据生长阶段绘制不同的形状
|
||||
ctx.fillStyle = baseColor;
|
||||
|
||||
switch (this.growthStage) {
|
||||
case 0: // 种子
|
||||
ctx.fillRect(6, 10, 4, 4);
|
||||
break;
|
||||
case 1: // 幼苗
|
||||
ctx.fillRect(7, 8, 2, 6);
|
||||
ctx.fillRect(5, 6, 6, 2);
|
||||
break;
|
||||
case 2: // 成长中
|
||||
ctx.fillRect(6, 5, 4, 8);
|
||||
ctx.fillRect(3, 3, 10, 3);
|
||||
break;
|
||||
case 3: // 成熟
|
||||
ctx.fillRect(5, 2, 6, 10);
|
||||
ctx.fillRect(2, 0, 12, 4);
|
||||
break;
|
||||
}
|
||||
|
||||
// 添加边框
|
||||
ctx.strokeStyle = '#000000';
|
||||
ctx.lineWidth = 1;
|
||||
ctx.strokeRect(0, 0, 16, 16);
|
||||
|
||||
// 将canvas添加为纹理
|
||||
this.scene.textures.addCanvas(textureKey, canvas);
|
||||
}
|
||||
|
||||
// 设置纹理
|
||||
this.setTexture(textureKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* 开始生长计时器
|
||||
*/
|
||||
startGrowthTimer() {
|
||||
// 计算每个生长阶段的时间
|
||||
const stageTime = this.growthTime / 4;
|
||||
|
||||
// 设置每个生长阶段的定时器
|
||||
for (let i = 1; i <= 3; i++) {
|
||||
this.scene.time.delayedCall(stageTime * i, () => {
|
||||
this.updateGrowthStage(i);
|
||||
});
|
||||
}
|
||||
|
||||
// 设置成熟定时器
|
||||
this.scene.time.delayedCall(this.growthTime, () => {
|
||||
this.isHarvestable = true;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新生长阶段
|
||||
*/
|
||||
updateGrowthStage(stage) {
|
||||
this.growthStage = stage;
|
||||
this.createCropTexture();
|
||||
}
|
||||
|
||||
/**
|
||||
* 作物被点击时的处理函数
|
||||
*/
|
||||
onCropClicked() {
|
||||
if (this.isHarvestable) {
|
||||
this.harvest();
|
||||
} else {
|
||||
// 显示生长进度
|
||||
const growthProgress = Math.min(100, Math.floor(((Date.now() - this.plantedTime) / this.growthTime) * 100));
|
||||
this.scene.events.emit('show-message', `作物正在生长中: ${growthProgress}%`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 收获作物
|
||||
*/
|
||||
harvest() {
|
||||
// 触发收获事件
|
||||
this.scene.events.emit('crop-harvested', this);
|
||||
|
||||
// 销毁作物
|
||||
this.destroy();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取作物信息
|
||||
*/
|
||||
getInfo() {
|
||||
return {
|
||||
type: this.cropType,
|
||||
growthStage: this.growthStage,
|
||||
isHarvestable: this.isHarvestable,
|
||||
plantedTime: this.plantedTime,
|
||||
growthTime: this.growthTime
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user