新增檔案TipBtn.ts
,內容如下:
import { ButtonBase } from "./ButtonBase";
import { eventEmitter } from "../Main";
import { GameFlowEvent } from "../core/Event";
export class TipBtn extends ButtonBase {
constructor() {
super('Button','Tip',50,287);
}
public trigger(){
eventEmitter.emit(GameFlowEvent.TipsRequest);
}
}
在GameBoard.ts裡的constructor監聽TipsRequest事件
eventEmitter.on(GameFlowEvent.TipsRequest,this.showTips.bind(this));
並新增所需要的方法
private tipsPath:Path;
showTips = ()=>{
this.tipsPath = board.getFirstExistPath();
let icon1 = this.getChildByName('icon_'+this.tipsPath.point1.x+"_"+this.tipsPath.point1.y) as GameIcon;
icon1.select();//為可連線的方塊增加紅框提示玩家
let icon2 = this.getChildByName('icon_'+this.tipsPath.point2.x+"_"+this.tipsPath.point2.y) as GameIcon;
icon2.select();
SoundMgr.play('Tips');
}
因為若玩家此時選擇了其他的方塊,我們需要把提示的框消除掉以避免混淆
createIcon = (id, x, y)=>{
let icon = new GameIcon(id,x,y);
this.addChild(icon);
let iconClickHandler = ()=>{
this.cancelTips();//在這時將提示的框消除
if (this.selected) {
//...
}
}
}
並實作消除提示紅框的功能
cancelTips=()=>{
if(this.tipsPath == null){
return;
}
let icon1 = this.getChildByName('icon_'+this.tipsPath.point1.x+"_"+this.tipsPath.point1.y) as GameIcon;
if(icon1) icon1.unSelect();
let icon2 = this.getChildByName('icon_'+this.tipsPath.point2.x+"_"+this.tipsPath.point2.y) as GameIcon;
if(icon2) icon2.unSelect();
}
新增檔案ReloadBtn.ts
,內容如下:
import { ButtonBase } from "./ButtonBase";
import { eventEmitter } from "../Main";
import { GameFlowEvent } from "../core/Event";
import { reloadTimes } from "./GameBoard";
export class ReloadBtn extends ButtonBase {
constructor() {
super('Button','Reflash',50,230);
eventEmitter.on(GameFlowEvent.GameRoundStart,(()=>{
this.enable = true;
}).bind(this))
}
public trigger(){
if(reloadTimes > 0){
eventEmitter.emit(GameFlowEvent.ReloadBoardRequest);
}
if(reloadTimes == 0){
this.enable = false;
}
}
}
在GameBoard.ts裡的constructor監聽ReloadBoardRequest事件
eventEmitter.on(GameFlowEvent.ReloadBoardRequest, this.reloadBoard.bind(this));
並實作所需的方法
reloadBoard = ()=>{
this.reloadTimes--;
do{
board.rearrangeBoard();
}while(board.getFirstExistPath() == null)
this.drawBoardIcon();
SoundMgr.play('ReloadBoard');
}
線上demo:http://claire-chang.com/ironman2018/1108/
今日成果下載:ironman20181108