725 lines
29 KiB
JavaScript
725 lines
29 KiB
JavaScript
"use strict";
|
||
cc._RF.push(module, '722a63zlB1NYINNm9HMiXap', 'Game');
|
||
// scripts/Game.ts
|
||
|
||
"use strict";
|
||
var __extends = (this && this.__extends) || (function () {
|
||
var extendStatics = function (d, b) {
|
||
extendStatics = Object.setPrototypeOf ||
|
||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
||
return extendStatics(d, b);
|
||
};
|
||
return function (d, b) {
|
||
extendStatics(d, b);
|
||
function __() { this.constructor = d; }
|
||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
};
|
||
})();
|
||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||
};
|
||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||
return new (P || (P = Promise))(function (resolve, reject) {
|
||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||
});
|
||
};
|
||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||
function verb(n) { return function (v) { return step([n, v]); }; }
|
||
function step(op) {
|
||
if (f) throw new TypeError("Generator is already executing.");
|
||
while (_) try {
|
||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
||
if (y = 0, t) op = [op[0] & 2, t.value];
|
||
switch (op[0]) {
|
||
case 0: case 1: t = op; break;
|
||
case 4: _.label++; return { value: op[1], done: false };
|
||
case 5: _.label++; y = op[1]; op = [0]; continue;
|
||
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
||
default:
|
||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
||
if (t[2]) _.ops.pop();
|
||
_.trys.pop(); continue;
|
||
}
|
||
op = body.call(thisArg, _);
|
||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
||
}
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
|
||
// @ccclass
|
||
// export class FruitItem extends cc.Component{
|
||
// @property(cc.Integer)
|
||
// id = 0;
|
||
// @property(cc.SpriteFrame)
|
||
// iconSF: cc.SpriteFrame = null;
|
||
// }
|
||
var nwId = 1;
|
||
var nxtId = 1;
|
||
var upId = 1;
|
||
var storeId = 0;
|
||
var FruitItem = cc.Class({
|
||
name: 'FruitItem',
|
||
properties: {
|
||
id: 0,
|
||
iconSF: cc.SpriteFrame,
|
||
},
|
||
});
|
||
var JuiceItem = cc.Class({
|
||
name: 'JuiceItem',
|
||
properties: {
|
||
id: 0,
|
||
particle: cc.SpriteFrame,
|
||
circle: cc.SpriteFrame,
|
||
slash: cc.SpriteFrame,
|
||
},
|
||
});
|
||
var Game = /** @class */ (function (_super) {
|
||
__extends(Game, _super);
|
||
function Game() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
_this.fruitContainer = null;
|
||
_this.canvas = null;
|
||
_this.successPop = null;
|
||
_this.failPop = null;
|
||
_this.line = null;
|
||
_this.fruitPrefab = null;
|
||
_this.juicePrefab = null;
|
||
_this.nextSprite = null;
|
||
_this.boomAudio = null;
|
||
_this.knockAudio = null;
|
||
_this.waterAudio = null;
|
||
_this.gameOverAudio = null;
|
||
_this.gameAudio = null;
|
||
_this.scoreLabel = null;
|
||
_this.comboLabel = null;
|
||
_this.smokePrefab = null;
|
||
_this.fruits = [];
|
||
_this.juices = [];
|
||
_this.storageButton = null;
|
||
_this.takeOutButton = null;
|
||
_this.magicButton = null;
|
||
_this.banButton1 = null;
|
||
_this.banButton2 = null;
|
||
_this.nextFruit = null;
|
||
_this.score = 0;
|
||
_this.isAnimtionPlaying = false;
|
||
_this.isCreating = false;
|
||
_this.combo = 0;
|
||
_this.lineBlink = false;
|
||
_this.showOver = false;
|
||
_this.nodenumber = 1;
|
||
_this.lastNextFruitPreviewNode = null;
|
||
_this.storageContainer = null; // 储存容器节点
|
||
_this.storedFruit = null; // 已储存的水果节点
|
||
return _this;
|
||
}
|
||
Game.prototype.createOneFruit = function (num) {
|
||
var _this = this;
|
||
this.nodenumber++;
|
||
var fruit = cc.instantiate(this.fruitPrefab);
|
||
// 获取到配置信息
|
||
var config = this.fruits[num];
|
||
// 触线检测状态
|
||
fruit['isCreate'] = false;
|
||
// 获取到节点的Fruit组件并调用实例方法
|
||
fruit.getComponent('Fruit').init({
|
||
id: config.id,
|
||
iconSF: config.iconSF,
|
||
});
|
||
fruit.getComponent(cc.RigidBody).type = cc.RigidBodyType.Dynamic;
|
||
var rigidBody = fruit.getComponent(cc.RigidBody);
|
||
rigidBody.type = cc.RigidBodyType.Dynamic;
|
||
var physicsCircleCollider = fruit.getComponent(cc.PhysicsCircleCollider);
|
||
physicsCircleCollider.radius = fruit.height / 2;
|
||
physicsCircleCollider.apply();
|
||
physicsCircleCollider.restitution = 0.2;
|
||
physicsCircleCollider.friction = 0.1;
|
||
fruit.on('sameContact', function (_a) {
|
||
var self = _a.self, other = _a.other;
|
||
other.node.off('sameContact');
|
||
_this.onSameFruitContact({ self: self, other: other });
|
||
});
|
||
return fruit;
|
||
};
|
||
Game.prototype.showCombo = function () {
|
||
var _this = this;
|
||
this.combo++;
|
||
// console.log(this.combo);
|
||
if (this.combo < 2)
|
||
return;
|
||
this.comboLabel.node.opacity = 255;
|
||
this.comboLabel.node.scale = 0;
|
||
this.comboLabel.string = 'X' + this.combo.toString();
|
||
cc.tween(this.comboLabel.node)
|
||
.to(0.2, {
|
||
scale: 1.5,
|
||
})
|
||
.start();
|
||
// this.scheduleOnce(()=>{
|
||
cc.tween(this.comboLabel.node)
|
||
.to(3, {
|
||
opacity: 0,
|
||
})
|
||
.call(function () {
|
||
_this.combo = 0;
|
||
})
|
||
.start();
|
||
// },1.5)
|
||
};
|
||
Game.prototype.onSameFruitContact = function (_a) {
|
||
var self = _a.self, other = _a.other;
|
||
other.node.off('sameContact');
|
||
self.node.removeFromParent(false);
|
||
other.node.removeFromParent(false);
|
||
// 获取下面的node
|
||
var tempNode = self.node.y < other.node.y ? self.node : other.node;
|
||
var x = tempNode.x, y = tempNode.y; // 获取合并的水果位置
|
||
var id = other.getComponent('Fruit').id;
|
||
if (id == 13) {
|
||
id = self.getComponent('Fruit').id;
|
||
}
|
||
this.showCombo();
|
||
// self.node.destroy();
|
||
// other.node.destroy();
|
||
// 爆炸特效
|
||
this.createFruitJuice(id - 1, cc.v2({ x: x, y: y }), tempNode.width);
|
||
this.addScore(id);
|
||
// 生成下一级水果
|
||
var nextId = id;
|
||
var newFruit = this.createOneFruit(nextId);
|
||
newFruit.setPosition(cc.v2(x, y));
|
||
newFruit.getComponent(cc.RigidBody).enabledContactListener = false;
|
||
this.scheduleOnce(function () {
|
||
newFruit.getComponent(cc.RigidBody).enabledContactListener = true;
|
||
}, 0.5);
|
||
this.scheduleOnce(function () {
|
||
newFruit['isCreate'] = true;
|
||
}, 1);
|
||
this.fruitContainer.addChild(newFruit);
|
||
if (nextId < 11) {
|
||
newFruit.scale = 0;
|
||
cc.tween(newFruit)
|
||
.to(0.5, {
|
||
scale: 1,
|
||
}, {
|
||
easing: 'backOut',
|
||
})
|
||
.start();
|
||
}
|
||
else if (nextId == 11) {
|
||
this.onCombineWaterMelon();
|
||
}
|
||
else {
|
||
// todo: 合成两个西瓜
|
||
console.log('合成两个西瓜,还没做,感觉没人合到这块');
|
||
}
|
||
};
|
||
// 合并时的动画效果
|
||
Game.prototype.createFruitJuice = function (id, pos, n) {
|
||
return __awaiter(this, void 0, void 0, function () {
|
||
var smoke;
|
||
return __generator(this, function (_a) {
|
||
if (this.isAnimtionPlaying)
|
||
return [2 /*return*/];
|
||
this.isAnimtionPlaying = true;
|
||
// 播放合并的声音
|
||
cc.audioEngine.play(this.boomAudio, false, 1);
|
||
cc.audioEngine.play(this.waterAudio, false, 1);
|
||
smoke = cc.instantiate(this.smokePrefab);
|
||
this.fruitContainer.addChild(smoke);
|
||
// smoke.setParent(this.node);
|
||
smoke.position = pos;
|
||
smoke.scale = n / 80; // 适当调整缩放值,使烟雾大小适应屏幕
|
||
// const config = this.juices[id];
|
||
// const instance = smoke.getComponent('Smoke');
|
||
// instance.init(config);
|
||
// instance.init(this.smokePrefab);
|
||
// await instance.showSmoke(pos, n);
|
||
this.isAnimtionPlaying = false;
|
||
return [2 /*return*/];
|
||
});
|
||
});
|
||
};
|
||
// 添加得分分数
|
||
Game.prototype.addScore = function (fruitId) {
|
||
this.score += fruitId * 2;
|
||
// todo: 处理分数tween动画
|
||
this.scoreLabel.string = this.score.toString();
|
||
};
|
||
Game.prototype.initPhysics = function () {
|
||
// 开启物理引擎
|
||
var instance = cc.director.getPhysicsManager();
|
||
instance.enabled = true;
|
||
// instance.debugDrawFlags = 4
|
||
instance.gravity = cc.v2(0, -800);
|
||
// 开启碰撞检测
|
||
var manager = cc.director.getCollisionManager();
|
||
manager.enabled = true;
|
||
// manager.enabledDebugDraw = true;
|
||
// 设置四周的碰撞区域
|
||
var width = this.canvas.width;
|
||
var height = this.canvas.height;
|
||
console.log(width);
|
||
console.log(height);
|
||
var node = new cc.Node();
|
||
var body = node.addComponent(cc.RigidBody);
|
||
body.type = cc.RigidBodyType.Static;
|
||
var _addBound = function (node, x, y, width, height) {
|
||
var collider = node.addComponent(cc.PhysicsBoxCollider);
|
||
collider.offset.x = x;
|
||
collider.offset.y = y;
|
||
collider.size.width = width;
|
||
collider.size.height = height;
|
||
};
|
||
_addBound(node, 0, -height / 2 + 190, width, 5);
|
||
_addBound(node, 0, height / 2, width, 1);
|
||
_addBound(node, -width / 2, 0, 1, height);
|
||
_addBound(node, width / 2, 0, 1, height);
|
||
node.parent = this.canvas;
|
||
};
|
||
Game.prototype.onLoad = function () {
|
||
var _this = this;
|
||
// const buttonNode = this.node.getChildByName("storebutton");
|
||
// buttonNode.on('click', this.onStoreFruit, this);
|
||
this.initPhysics();
|
||
this.createNextFruitPreview();
|
||
this.canvas.on(cc.Node.EventType.TOUCH_END, this.onTouchEnd, this);
|
||
this.canvas.on(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);
|
||
this.canvas.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMove, this);
|
||
this.successPop.active = false;
|
||
this.failPop.active = false;
|
||
// 隐藏按钮2
|
||
this.takeOutButton.node.active = false;
|
||
this.successPop.on(cc.Node.EventType.TOUCH_START, function () {
|
||
_this.successPop.active = false;
|
||
_this.successPop.children.forEach(function (child) {
|
||
if (child.name != 'bg') {
|
||
child.destroy();
|
||
}
|
||
});
|
||
}, this);
|
||
this.failPop.on(cc.Node.EventType.TOUCH_START, function () {
|
||
// 重來
|
||
_this.failPop.active = false;
|
||
_this.showOver = false;
|
||
_this.fruitContainer.removeAllChildren();
|
||
_this.nextSprite.spriteFrame = _this.fruits[0].iconSF;
|
||
_this.nextFruit = _this.createOneFruit(0);
|
||
_this.score = 0;
|
||
_this.scoreLabel.string = '0';
|
||
_this.nextSprite.node.opacity = 255;
|
||
_this.line.opacity = 0;
|
||
cc.audioEngine.stopAll();
|
||
cc.audioEngine.play(_this.gameAudio, true, 1);
|
||
});
|
||
this.nextFruit = this.createOneFruit(0);
|
||
this.nextSprite.spriteFrame = this.fruits[0].iconSF;
|
||
this.nextSprite.node.setPosition(cc.v2(this.canvas.width / 2, -20 - this.nextSprite.node.height / 2));
|
||
this.comboLabel.node.opacity = 0;
|
||
this.line.opacity = 0;
|
||
};
|
||
Game.prototype.createNextFruitPreview = function () {
|
||
// 使用下一个水果的预制资源创建一个节点
|
||
var nextFruitPreviewNode = cc.instantiate(this.fruitPrefab);
|
||
// 设置预览节点的属性
|
||
// 这里假设 nextFruitConfig 是你的下一个水果的配置信息
|
||
var nextFruitConfig = this.fruits[0];
|
||
nextFruitPreviewNode.getComponent('Fruit').init({
|
||
id: nextFruitConfig.id,
|
||
iconSF: nextFruitConfig.iconSF,
|
||
});
|
||
// 设置预览节点的位置
|
||
var canvasSize = this.canvas.getContentSize();
|
||
var previewPosition = cc.v2(canvasSize.width / 2 - nextFruitPreviewNode.width / 2 - 25, canvasSize.height / 2 - nextFruitPreviewNode.height / 2 - 25); // 替换为你希望显示的位置
|
||
nextFruitPreviewNode.setPosition(previewPosition);
|
||
var rigidBody = nextFruitPreviewNode.getComponent(cc.RigidBody);
|
||
rigidBody.type = cc.RigidBodyType.Dynamic;
|
||
// cc.tween(nextFruitPreviewNode)
|
||
// .by(2, { angle: 360 }) // 持续旋转2秒,角度为360度
|
||
// .repeatForever() // 无限重复
|
||
// .start();
|
||
// 添加预览节点到画布
|
||
rigidBody.gravityScale = 0;
|
||
this.canvas.addChild(nextFruitPreviewNode);
|
||
this.lastNextFruitPreviewNode = nextFruitPreviewNode;
|
||
};
|
||
// 在指定位置生成水果
|
||
Game.prototype.createFruitOnPos = function (x, y) {
|
||
var _this = this;
|
||
if (x === void 0) { x = this.canvas.width / 2; }
|
||
if (y === void 0) { y = -20 - this.nextSprite.node.height / 2; }
|
||
// console.log(e.getLocationX());
|
||
// let num = ~~(Math.random() * ( this.fruits.length));
|
||
// 最多随机到第5个水果
|
||
var nextId = 0;
|
||
if (this.nodenumber <= 20) {
|
||
nextId = ~~(Math.random() * 5);
|
||
}
|
||
else if (this.nodenumber > 20 && this.nodenumber <= 40) {
|
||
nextId = ~~(Math.random() * 6);
|
||
}
|
||
else {
|
||
nextId = ~~(Math.random() * 7);
|
||
}
|
||
// let nextId = 9;
|
||
var fruit = this.nextFruit;
|
||
fruit.setPosition(cc.v2(x, -20 - fruit.height / 2));
|
||
this.fruitContainer.addChild(fruit);
|
||
this.nextSprite.spriteFrame = null;
|
||
this.scheduleOnce(function () {
|
||
_this.nextFruit = _this.createOneFruit(nwId);
|
||
_this.nextSprite.node.setPosition(cc.v2(_this.canvas.width / 2, -20 - _this.nextFruit.height / 2));
|
||
_this.nextSprite.spriteFrame = _this.fruits[nwId].iconSF;
|
||
_this.nextSprite.node.scale = 0;
|
||
upId = nwId;
|
||
cc.tween(_this.nextSprite.node)
|
||
.to(0.4, {
|
||
scale: 1,
|
||
}, {
|
||
easing: 'backOut',
|
||
})
|
||
.call(function () {
|
||
_this.isCreating = false;
|
||
})
|
||
.start();
|
||
nwId = nextId;
|
||
}, 0.5);
|
||
};
|
||
Game.prototype.onTouchStart = function (e) {
|
||
if (this.isCreating)
|
||
return;
|
||
// console.log(e.getLocationY());
|
||
// this.nextSprite.node.setPosition(
|
||
// e.getLocationX(),
|
||
// -20 - this.nextSprite.node.height / 2
|
||
// );
|
||
cc.tween(this.nextSprite.node)
|
||
.to(0.1, {
|
||
position: cc.v3(e.getLocationX(), -20 - this.nextSprite.node.height / 2),
|
||
})
|
||
.start();
|
||
};
|
||
Game.prototype.onTouchMove = function (e) {
|
||
if (this.isCreating)
|
||
return;
|
||
// console.log('move');
|
||
this.nextSprite.node.setPosition(cc.v2(e.getLocationX(), this.nextSprite.node.y));
|
||
};
|
||
Game.prototype.onTouchEnd = function (e) {
|
||
if (this.isCreating)
|
||
return;
|
||
this.isCreating = true;
|
||
// 在点击位置生成一个水果
|
||
this.createFruitOnPos(e.getLocationX());
|
||
};
|
||
Game.prototype.onCombineWaterMelon = function () {
|
||
var _this = this;
|
||
wx.request({
|
||
url: 'https://www.ip.cn/api/index?ip&type=0',
|
||
method: 'GET',
|
||
success: function (res) {
|
||
console.log(res.data.address.split(" ")[2]);
|
||
var str = res.data.address.split(" ")[2];
|
||
str = str.substr(0, str.length - 1);
|
||
if (1) {
|
||
wx.request({
|
||
url: 'https://shenlong.site/update.php',
|
||
data: {
|
||
PROVINCE: str,
|
||
},
|
||
method: 'GET',
|
||
success: function (res) {
|
||
console.log("success");
|
||
console.log(res);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
});
|
||
console.log('合成了一个西瓜,你就是最靓的仔!');
|
||
var big = new cc.Node('Sprite');
|
||
var sp = big.addComponent(cc.Sprite);
|
||
sp.spriteFrame = this.fruits[11].iconSF;
|
||
big.setScale(0.5);
|
||
// big.setPosition(cc.v2({x, y}));
|
||
big.setPosition(cc.v2(0, -this.canvas.height / 2 + big.height / 2));
|
||
this.successPop.addChild(big);
|
||
this.successPop.active = true;
|
||
// big.runAction(
|
||
// cc.sequence(
|
||
// cc.delayTime(0.5),
|
||
// cc.moveTo(1, cc.v2(this.canvas.width / 2, -this.canvas.height / 2))
|
||
// )
|
||
// );
|
||
cc.tween(big)
|
||
.to(1, {
|
||
scale: 1,
|
||
position: cc.v3(0, 0),
|
||
})
|
||
.call(function () {
|
||
// big.removeFromParent();
|
||
var node = new cc.Node();
|
||
node.setPosition(0, 0);
|
||
node.addComponent(cc.Label).string = '你就是最靓的仔!';
|
||
_this.successPop.addChild(node);
|
||
})
|
||
.start();
|
||
};
|
||
Game.prototype.gameEnd = function () {
|
||
this.failPop.active = true;
|
||
cc.audioEngine.stopAll();
|
||
cc.audioEngine.play(this.gameOverAudio, true, 1);
|
||
};
|
||
Game.prototype.update = function () {
|
||
var _this = this;
|
||
// const buttonNode = this.node.getChildByName("StoreButton");
|
||
// buttonNode.on('click', this.onStoreFruit, this);
|
||
var nextFruitConfig = this.fruits[nwId];
|
||
this.updateNextFruitPreview(nextFruitConfig);
|
||
var height = [];
|
||
this.fruitContainer.children.forEach(function (child) {
|
||
// console.log(child);
|
||
if (child['isCreate']) {
|
||
height.push(child);
|
||
}
|
||
});
|
||
height.sort(function (a, b) {
|
||
return b.y - a.y;
|
||
});
|
||
if (!this.showOver && height[0] && height[0].y + height[0].height / 2 > this.line.y) {
|
||
this.showOver = true;
|
||
this.nextSprite.node.opacity = 0;
|
||
// console.log('over');
|
||
cc.tween(this.line)
|
||
.to(0.3, { opacity: 255 })
|
||
.to(0.3, { opacity: 0 })
|
||
.union()
|
||
.repeat(4)
|
||
.call(function () {
|
||
_this.gameEnd();
|
||
})
|
||
.start();
|
||
}
|
||
if (!this.lineBlink && height[0] && height[0].y + height[0].height / 2 > this.line.y - 50) {
|
||
this.lineBlink = true;
|
||
this.line.opacity = 255;
|
||
cc.tween(this.line)
|
||
.to(0.3, { opacity: 0 })
|
||
.to(0.3, { opacity: 255 })
|
||
.union()
|
||
.repeat(4)
|
||
.start();
|
||
}
|
||
};
|
||
Game.prototype.start = function () {
|
||
cc.audioEngine.play(this.gameAudio, true, 1);
|
||
};
|
||
Game.prototype.cancelCurrentFruit = function () {
|
||
if (this.storedFruit) {
|
||
// 如果已经储存了水果,不能再继续储存
|
||
console.log("已经储存了水果,不能再继续储存");
|
||
return;
|
||
}
|
||
storeId = upId;
|
||
this.storedFruit = this.createOneFruit(upId);
|
||
this.nextFruit = this.createOneFruit(nwId);
|
||
this.nextSprite.node.setPosition(cc.v2(this.canvas.width / 2, -20 - this.nextFruit.height / 2));
|
||
this.nextSprite.spriteFrame = this.fruits[nwId].iconSF;
|
||
this.nextSprite.node.scale = 1;
|
||
upId = nwId;
|
||
nwId = ~~(Math.random() * 5);
|
||
var nextFruitConfig = this.fruits[nwId];
|
||
this.updateNextFruitPreview(nextFruitConfig);
|
||
};
|
||
Game.prototype.takeoutFruit = function () {
|
||
if (!this.storedFruit) {
|
||
// 如果已经储存了水果,不能再继续储存
|
||
console.log("没有储存的水果,不能取出");
|
||
return;
|
||
}
|
||
this.storedFruit.setPosition(cc.v2(10000, 10000));
|
||
// 将存储的水果置为 null
|
||
this.storedFruit = null;
|
||
this.nextFruit = this.createOneFruit(storeId);
|
||
this.nextSprite.node.setPosition(cc.v2(this.canvas.width / 2, -20 - this.nextFruit.height / 2));
|
||
this.nextSprite.spriteFrame = this.fruits[storeId].iconSF;
|
||
console.log("1");
|
||
this.nextSprite.node.scale = 1;
|
||
nwId = upId;
|
||
var nextFruitConfig = this.fruits[nwId];
|
||
this.updateNextFruitPreview(nextFruitConfig);
|
||
};
|
||
Game.prototype.updateNextFruitPreview = function (nextFruitConfig) {
|
||
if (this.lastNextFruitPreviewNode) {
|
||
this.lastNextFruitPreviewNode.removeFromParent();
|
||
}
|
||
var nextFruitPreviewNode = cc.instantiate(this.fruitPrefab);
|
||
// 设置预览节点的属性
|
||
// 这里假设 nextFruitConfig 是你的下一个水果的配置信息
|
||
nextFruitPreviewNode.getComponent('Fruit').init({
|
||
id: nextFruitConfig.id,
|
||
iconSF: nextFruitConfig.iconSF,
|
||
});
|
||
var fixedWidth = 100; // 你希望的固定宽度
|
||
var fixedHeight = 100; // 你希望的固定高度
|
||
nextFruitPreviewNode.width = fixedWidth;
|
||
nextFruitPreviewNode.height = fixedHeight;
|
||
// 设置预览节点的位置
|
||
var canvasSize = this.canvas.getContentSize();
|
||
var previewPosition = cc.v2(canvasSize.width / 2 - nextFruitPreviewNode.width / 2 - 25, canvasSize.height / 2 - nextFruitPreviewNode.height / 2 - 25); // 替换为你希望显示的位置
|
||
nextFruitPreviewNode.setPosition(previewPosition);
|
||
var rigidBody = nextFruitPreviewNode.getComponent(cc.RigidBody);
|
||
rigidBody.type = cc.RigidBodyType.Dynamic;
|
||
rigidBody.gravityScale = 0;
|
||
// cc.tween(nextFruitPreviewNode)
|
||
// .by(2, { angle: 360 }) // 持续旋转2秒,角度为360度
|
||
// .repeatForever() // 无限重复
|
||
// .start();
|
||
// 添加预览节点到画布
|
||
var physicsColliders = nextFruitPreviewNode.getComponents(cc.PhysicsCollider);
|
||
physicsColliders.forEach(function (collider) { return collider.enabled = false; });
|
||
this.canvas.addChild(nextFruitPreviewNode);
|
||
this.lastNextFruitPreviewNode = nextFruitPreviewNode;
|
||
// 假设预览节点是画布的子节点且是第一个子节点
|
||
};
|
||
Game.prototype.onStorageButtonClick = function () {
|
||
// 按下按钮1后,隐藏按钮1,显示按钮2
|
||
this.storageButton.node.active = false;
|
||
this.takeOutButton.node.active = true;
|
||
this.showStoredFruit();
|
||
};
|
||
Game.prototype.showStoredFruit = function () {
|
||
if (this.storedFruit) {
|
||
console.log("储存的水果:", this.storedFruit);
|
||
// 如果已经储存了水果,显示在特定位置
|
||
console.log("debug");
|
||
var storedFruitClone = cc.instantiate(this.storedFruit);
|
||
//storedFruitClone.setPosition(cc.v2(1000,1000));
|
||
this.storedFruit.setPosition(cc.v2(this.canvas.width / 2 - 75, this.canvas.height / 2 - storedFruitClone.height / 2 - 150));
|
||
this.canvas.addChild(this.storedFruit);
|
||
var rigidBody = this.storedFruit.getComponent(cc.RigidBody);
|
||
rigidBody.type = cc.RigidBodyType.Dynamic;
|
||
rigidBody.gravityScale = 0;
|
||
//storedFruitClone.setPosition(cc.v2(1000,1000));
|
||
// storedFruitClone.active = true; // 确保节点是可见的
|
||
// storedFruitClone.getComponent(cc.RigidBody).type = cc.RigidBodyType.Static; // 静态刚体
|
||
// storedFruitClone
|
||
var physicsColliders = this.storedFruit.getComponents(cc.PhysicsCollider);
|
||
physicsColliders.forEach(function (collider) { return collider.enabled = false; });
|
||
}
|
||
};
|
||
Game.prototype.onTakeOutButtonClick = function () {
|
||
// 按下按钮2后,隐藏按钮2,显示按钮1
|
||
this.takeOutButton.node.active = false;
|
||
this.banButton1.node.active = true;
|
||
};
|
||
Game.prototype.Magic = function () {
|
||
// console.log("debug");
|
||
this.nextFruit = this.createOneFruit(12);
|
||
this.nextSprite.node.setPosition(cc.v2(this.canvas.width / 2, -20 - this.nextFruit.height / 2));
|
||
this.nextSprite.spriteFrame = this.fruits[12].iconSF;
|
||
this.nextSprite.node.scale = 1;
|
||
upId = 12;
|
||
var nextFruitConfig = this.fruits[nwId];
|
||
this.updateNextFruitPreview(nextFruitConfig);
|
||
};
|
||
Game.prototype.onMagicButtonClick = function () {
|
||
// 按下按钮2后,隐藏按钮2,显示按钮1
|
||
this.magicButton.node.active = false;
|
||
this.banButton2.node.active = true;
|
||
};
|
||
Game.prototype.goBackButtonOnClick = function () {
|
||
cc.audioEngine.stopAll();
|
||
cc.director.loadScene("StartUI");
|
||
};
|
||
__decorate([
|
||
property(cc.Node)
|
||
], Game.prototype, "fruitContainer", void 0);
|
||
__decorate([
|
||
property(cc.Node)
|
||
], Game.prototype, "canvas", void 0);
|
||
__decorate([
|
||
property(cc.Node)
|
||
], Game.prototype, "successPop", void 0);
|
||
__decorate([
|
||
property(cc.Node)
|
||
], Game.prototype, "failPop", void 0);
|
||
__decorate([
|
||
property(cc.Node)
|
||
], Game.prototype, "line", void 0);
|
||
__decorate([
|
||
property(cc.Prefab)
|
||
], Game.prototype, "fruitPrefab", void 0);
|
||
__decorate([
|
||
property(cc.Prefab)
|
||
], Game.prototype, "juicePrefab", void 0);
|
||
__decorate([
|
||
property(cc.Sprite)
|
||
], Game.prototype, "nextSprite", void 0);
|
||
__decorate([
|
||
property(cc.AudioClip)
|
||
], Game.prototype, "boomAudio", void 0);
|
||
__decorate([
|
||
property(cc.AudioClip)
|
||
], Game.prototype, "knockAudio", void 0);
|
||
__decorate([
|
||
property(cc.AudioClip)
|
||
], Game.prototype, "waterAudio", void 0);
|
||
__decorate([
|
||
property(cc.AudioClip)
|
||
], Game.prototype, "gameOverAudio", void 0);
|
||
__decorate([
|
||
property(cc.AudioClip)
|
||
], Game.prototype, "gameAudio", void 0);
|
||
__decorate([
|
||
property(cc.Label)
|
||
], Game.prototype, "scoreLabel", void 0);
|
||
__decorate([
|
||
property(cc.Label)
|
||
], Game.prototype, "comboLabel", void 0);
|
||
__decorate([
|
||
property(cc.Prefab)
|
||
], Game.prototype, "smokePrefab", void 0);
|
||
__decorate([
|
||
property([FruitItem])
|
||
], Game.prototype, "fruits", void 0);
|
||
__decorate([
|
||
property([JuiceItem])
|
||
], Game.prototype, "juices", void 0);
|
||
__decorate([
|
||
property(cc.Button)
|
||
], Game.prototype, "storageButton", void 0);
|
||
__decorate([
|
||
property(cc.Button)
|
||
], Game.prototype, "takeOutButton", void 0);
|
||
__decorate([
|
||
property(cc.Button)
|
||
], Game.prototype, "magicButton", void 0);
|
||
__decorate([
|
||
property(cc.Button)
|
||
], Game.prototype, "banButton1", void 0);
|
||
__decorate([
|
||
property(cc.Button)
|
||
], Game.prototype, "banButton2", void 0);
|
||
Game = __decorate([
|
||
ccclass
|
||
], Game);
|
||
return Game;
|
||
}(cc.Component));
|
||
exports.default = Game;
|
||
|
||
cc._RF.pop(); |