rpg.gif
代碼
const {ccclass, property} = cc._decorator;
@ccclass
export default class player extends cc.Component {
//自定義方向鍵和攻擊鍵
public KEY_UP:number = 0;
public KEY_DOWN:number = 1;
public KEY_LEFT:number = 2;
public KEY_RIGHT:number = 3;
public KEY_ATTACK:number = 4;
//技能列表中技能的數(shù)量
public SKILLLIST_SIZE:number = 1;
//每組組合技能的按鍵數(shù)量
public SKILL_KEYCOUNT = 3;
//技能列表->二維數(shù)組
private SkillList:Array<any> = [[this.KEY_DOWN,this.KEY_UP,this.KEY_ATTACK]];
//記錄當前按下的按鍵的值
private currentKeyCode:number = 0;
//玩家輸入的按鍵組合
private inputKeys:Array<any> = [];
//是否開始計時
private startFrame:boolean = false;
//限制輸入組合按鍵的時間(計時器)
private timer:number = 5;
//記錄開啟監(jiān)聽到現(xiàn)在的時間
private time:number = 0;
//是否觸發(fā)技能成功
private isSuccess:boolean = false;
onLoad () {
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,this.OnKeyDown,this);
}
start () {
}
update (dt) {
if (this.startFrame) {
//計時器++
this.time += dt;
if (this.time >= this.timer) {
//計時器超時
if (!this.isSuccess) {
this.Reset();
}
}
}
}
//按下按鍵
OnKeyDown(event){
console.log("按下的按鍵的keycode",event.keyCode);
switch (event.keyCode) {
case cc.macro.KEY.w:
this.currentKeyCode = this.KEY_UP;
break;
case cc.macro.KEY.s:
this.currentKeyCode = this.KEY_DOWN;
break;
case cc.macro.KEY.a:
this.currentKeyCode = this.KEY_LEFT;
break;
case cc.macro.KEY.d:
this.currentKeyCode = this.KEY_RIGHT;
break;
case cc.macro.KEY.j:
this.currentKeyCode = this.KEY_ATTACK;
break;
}
if (this.isSuccess) {
console.log("Reset");
this.isSuccess = false;
this.Reset();
}
if (!this.startFrame) {
//啟動計時器
this.startFrame = true;
}
//將按鍵值添加到輸入按鍵列表
this.inputKeys.push(this.currentKeyCode);
//遍歷
let size = this.inputKeys.length;
if (size<this.SKILL_KEYCOUNT) { //按鍵數(shù)不夠
}else{ //如果玩家按鍵數(shù)不小于設(shè)定鍵,取后5位
console.log("未移除前的元素",this.inputKeys);
for (let k = 0; k < size - this.SKILL_KEYCOUNT; k++) {
this.inputKeys.splice(0,1);
}
console.log("移除后的元素",this.inputKeys);
for (let i = 0; i < this.SKILLLIST_SIZE; i++) {
let successCount = 0;
for (let j = 0; j < this.SKILL_KEYCOUNT; j++) {
let temp = this.inputKeys[j];
if (temp == this.SkillList[i][j]) {
successCount ++;
}
if (successCount == this.SKILL_KEYCOUNT) {
console.log("isSuccess");
this.isSuccess = true;
//播放組合技能動畫
break;
}
}
}
}
}
//重置
Reset(){
this.time = 0;
this.startFrame = false;
this.inputKeys = [];
}
}