[fix] HoldButton 點擊事件衝突

This commit is contained in:
2022-05-05 19:19:28 +08:00
parent 4aabd0b866
commit d771dd7593
20 changed files with 3594 additions and 6079 deletions

View File

@@ -114,22 +114,29 @@ export class Badminton extends cc.Component {
protected onLoad(): void {
Badminton._instance = this;
let self: this = this;
new LocalStorageData();
this.config.Init();
this.record.Init();
CoroutineV2.Parallel(
this.Lobby.Show(),
this.ScoreBoard.Show(),
).Start();
if (this.HistoryPanel != null) {
this.HistoryPanel.LoadRecord();
this.HistoryPanel.Hide();
CoroutineV2.Single(this.HistoryPanel.Hide()).Start();
}
// textToSpeech = FindObjectOfType<TextToSpeech>();
let AsyncFunction: () => IterableIterator<any> = function* (): IterableIterator<any> {
yield CoroutineV2.Parallel(
self.config.Init(),
self.record.Init(),
).Start();
CoroutineV2.Parallel(
self.Lobby.Show(),
self.ScoreBoard.Show(),
).Start();
if (self.HistoryPanel != null) {
self.HistoryPanel.LoadRecord();
self.HistoryPanel.Hide();
CoroutineV2.Single(self.HistoryPanel.Hide()).Start();
}
// textToSpeech = FindObjectOfType<TextToSpeech>();
CoroutineV2.Single(self.Show()).Start();
};
CoroutineV2.Single(AsyncFunction()).Start();
}
protected start(): void {
public *Show(): IterableIterator<any> {
CoroutineV2.Single(this.ScoreBoard.Hide()).Start();
this._initUI();
// LoadStatus();
@@ -147,6 +154,7 @@ export class Badminton extends cc.Component {
//#region Custom
private _initUI(): void {
let self: this = this;
this._updateCurSelMember();
// this.toggleItem.gameObject.SetActive(false);
// this.teamItem.gameObject.SetActive(false);
@@ -166,20 +174,17 @@ export class Badminton extends cc.Component {
for (let idx: number = 0; idx < this.TeamMemberList.length; idx++) {
let memberName: string = this.TeamMemberList[idx].Name;
let item: cc.Toggle = parent.ExAddChild(this.toggleItem).getComponent(cc.Toggle);
item.node.getChildByName("Label").getComponent(cc.Label).string = memberName;
item.node.getChildByName("Name").getComponent(cc.Label).string = memberName;
item.node.active = true;
item.node.getChildByName("Btn_Del").on("click", () => { this.OnDelMember(idx); }, this);
let picObj: cc.Node = item.node.getChildByName("Avatar").getChildByName("Pic");
if (picObj != null) {
picObj.getComponent(cc.Sprite).spriteFrame = this.config.GetAvatarPicById(this.TeamMemberList[idx].AvatarId);
// let EventHandler: cc.Component.EventHandler = new cc.Component.EventHandler();
// EventHandler.target = this.node;
// EventHandler.component = this.name.split("<")[1].split(">")[0];
// EventHandler.handler = "OnChangeAvatar";
// EventHandler.customEventData = idx.toString();
// picObj.getComponent(HoldButton).OnInvoke.push(EventHandler);
picObj.getComponent(HoldButton).OnInvoke.AddListener(() => { this.OnChangeAvatar(idx); });
picObj.on("click", () => { item.isChecked = !item.isChecked; }, this);
picObj.parent.getComponent(HoldButton).OnInvoke.AddListener(() => { this.OnChangeAvatar(idx); });
picObj.parent.on("click", () => {
item.isChecked = !item.isChecked;
self._onChangeSelMember(item);
}, this);
}
this._m_toggleList.push(item);
@@ -239,7 +244,7 @@ export class Badminton extends cc.Component {
this.CurMemberList.Clear();
this._m_toggleList.forEach((member: cc.Toggle) => {
if (member.isChecked) {
this.CurMemberList.push(member.node.getChildByName("Label").getComponent(cc.Label).string);
this.CurMemberList.push(member.node.getChildByName("Name").getComponent(cc.Label).string);
}
});
if (this.TeamMemberList != null && this.TeamMemberList.length > 0) {
@@ -255,7 +260,7 @@ export class Badminton extends cc.Component {
break;
}
for (let j: number = 0; j < 2; j++) {
let memberName: string = team.getChildByName("Member_" + (j + 1) + "/Text").getComponent(cc.Label).string;
let memberName: string = team.getChildByName("Member_" + (j + 1)).getChildByName("Name").getComponent(cc.Label).string;
chkMemberList.push(memberName);
}
}
@@ -268,7 +273,7 @@ export class Badminton extends cc.Component {
}
private _updateTeamShow(chkMemberList: string[]): void {
let teamCount: number = chkMemberList.length / 2;
let teamCount: number = Math.floor(chkMemberList.length / 2);
let maxTeam: number = Math.ceil(chkMemberList.length / 2.0);
while (this._m_teamList.length > maxTeam) {
this._m_teamList[this._m_teamList.length - 1].destroy();
@@ -285,8 +290,8 @@ export class Badminton extends cc.Component {
} else {
obj = this._m_teamList[i];
}
obj.getChildByName("Member_1").getChildByName("Text").getComponent(cc.Label).string = "";
obj.getChildByName("Member_2").getChildByName("Text").getComponent(cc.Label).string = "";
obj.getChildByName("Member_1").getChildByName("Name").getComponent(cc.Label).string = "";
obj.getChildByName("Member_2").getChildByName("Name").getComponent(cc.Label).string = "";
obj.getChildByName("Member_1").getComponent(cc.Sprite).enabled = false;
obj.getChildByName("Member_2").getComponent(cc.Sprite).enabled = false;
obj.active = false;
@@ -309,7 +314,7 @@ export class Badminton extends cc.Component {
chkMemberList.ExRemoveAt(0);
}
team.getChildByName("Member_" + (j + 1) + "/Text").getComponent(cc.Label).string = name;
team.getChildByName("Member_" + (j + 1)).getChildByName("Name").getComponent(cc.Label).string = name;
team.getChildByName("Member_" + (j + 1)).getComponent(cc.Sprite).enabled = name !== this.GetDefaultMemberName();
team.getChildByName("Member_" + (j + 1)).getComponent(cc.Sprite).spriteFrame = this.config.GetAvatarPicByName(name);
team.active = true;
@@ -319,8 +324,8 @@ export class Badminton extends cc.Component {
let name_1: string = chkMemberList[0];
let name_2: string = this.GetDefaultMemberName();
let team: cc.Node = this._m_teamList[teamCount];
team.getChildByName("Member_1").getChildByName("Text").getComponent(cc.Label).string = name_1;
team.getChildByName("Member_2").getChildByName("Text").getComponent(cc.Label).string = name_2;
team.getChildByName("Member_1").getChildByName("Name").getComponent(cc.Label).string = name_1;
team.getChildByName("Member_2").getChildByName("Name").getComponent(cc.Label).string = name_2;
team.getChildByName("Member_1").getComponent(cc.Sprite).enabled = true;
team.getChildByName("Member_1").getComponent(cc.Sprite).spriteFrame = this.config.GetAvatarPicByName(name_1);
team.getChildByName("No").getComponent(cc.Label).string = (index + 1).toString();
@@ -347,6 +352,55 @@ export class Badminton extends cc.Component {
// this.AvatarPanel.OpenChange(teamMemberList[index]);
}
public LoadStatus(): void {
// console.log("LoadStatus ======= ");
// try {
// let members: string[] = this.TeamMemberList.map(m => Object.values(m)[0]);
// var str_member = PlayerPrefs.GetString("member", "[]");
// var str_avatar = PlayerPrefs.GetString("avatar", "[]");
// List < string > member_list = ((List<object>)MiniJSON.Json.Deserialize(str_member)).ConvertAll((val) => ((string)val).Trim());
// List < int > avatar_list = ((List<object>)MiniJSON.Json.Deserialize(str_avatar)).ConvertAll((val) => (int)(long)val);
// for (int i = 0; i < member_list.Count; i++)
// {
// string member = member_list[i];
// if (!members.Contains(member)) {
// if (member != GetDefaultMemberName()) {
// teamMemberList.Add(new MemberData() { name = member, avatarId = avatar_list[i] });
// }
// }
// else {
// teamMemberList.Find((m) => m.name == member).avatarId = avatar_list[i];
// }
// }
// curMemberList.Clear();
// foreach(Toggle member in m_toggleList) { member.isOn = false; }
// curMemberList = member_list.ConvertAll(v => v);
// //curMemberList = member_list;
// InitUI();
// for (int i = 0; i < member_list.Count; i++)
// {
// string member = member_list[i];
// int index = members.IndexOf(member);
// if (index != -1) {
// m_toggleList[index].isOn = true;
// }
// else {
// // 那個
// }
// }
// UpdateTeamShow(member_list);
// //updateCurSelMember();
// LoadScoreResult();
// voicePanel.SetProps(MiniJSON.Json.Deserialize(PlayerPrefs.GetString("voice", "null")) as Dictionary<string, object>);
// UpdateGameResult();
// }
// catch (System.Exception err)
// {
// Debug.Log(err);
// }
}
//#endregion
}

View File

@@ -1,7 +1,9 @@
import LocalStorageData from "../Engine/Data/LocalStorageData";
import { CoroutineV2 } from "../Engine/CatanEngine/CoroutineV2/CoroutineV2";
import AvatarSettings from "../Settings/AvatarSettings";
import GameConfig from "../Settings/GameConfig";
import { Badminton } from "./Badminton";
import { AvatarData, AvatarSettings, GameConfig, MemberData } from "./MemberData";
import { AvatarData, MemberData } from "./MemberData";
/** ConfigManager */
export default class ConfigManager {
@@ -24,17 +26,29 @@ export default class ConfigManager {
this.Main = mainControl;
}
public Init(): void {
this.LoadMemberList();
this.LoadAvatarSettings();
public *Init(): IterableIterator<any> {
yield CoroutineV2.Parallel(
this.LoadMemberList(),
this.LoadAvatarSettings()
).Start();
}
public LoadMemberList(): void {
public *LoadMemberList(): IterableIterator<any> {
let teamMemberList: MemberData[] = this.Main.TeamMemberList;
if (teamMemberList == null) {
this.Main.TeamMemberList = teamMemberList = [];
}
let request: GameConfig = (<GameConfig>JSON.parse(LocalStorageData.Instance.GameConfig));
let request: GameConfig;
cc.resources.load("GameConfig", function (err: Error, prefab: cc.Prefab): void {
if (err) {
console.error(`resources.load GameConfig error: ${err}`);
return;
}
request = prefab.data.getComponent(GameConfig);
});
while (!request) {
yield null;
}
if (request != null) {
let members: string[] = teamMemberList.map(m => Object.values(m)[0]);
@@ -43,11 +57,23 @@ export default class ConfigManager {
teamMemberList.push(new MemberData(request.Members[i]));
}
}
this.Main.TeamMemberList = teamMemberList;
}
}
public LoadAvatarSettings(): void {
let request: AvatarSettings = (<AvatarSettings>JSON.parse(LocalStorageData.Instance.AvatarSettings));
public *LoadAvatarSettings(): IterableIterator<any> {
// let request: AvatarSettings = (<AvatarSettings>JSON.parse(LocalStorageData.Instance.AvatarSettings));
let request: AvatarSettings;
cc.resources.load("AvatarSettings", function (err: Error, prefab: cc.Prefab): void {
if (err) {
console.error(`resources.load AvatarSettings error: ${err}`);
return;
}
request = prefab.data.getComponent(AvatarSettings);
});
while (!request) {
yield null;
}
if (request != null) {
this.Avatars = request.Avatars;
}

View File

@@ -1,5 +1,16 @@
const { ccclass, property } = cc._decorator;
//#region Enum
/** AvatarColor */
export enum AvatarColor {
None,
Pink,
Yellow
}
//#endregion
//#region Class
/** 成員資料 */
@@ -21,25 +32,63 @@ export class MemberData {
}
/** AvatarData */
@ccclass("AvatarData")
export class AvatarData {
public ID: number;
@property()
public ID: number = 0;
public Model: number;
@property()
public Model: number = 0;
public Name: string;
@property()
public Name: string = "";
public Desc: string;
@property()
public Desc: string = "";
public Pic: cc.SpriteFrame;
@property({ type: cc.SpriteFrame })
public Pic: cc.SpriteFrame = null;
public BigPic: cc.SpriteFrame;
@property({ type: cc.SpriteFrame })
public BigPic: cc.SpriteFrame = null;
public BG: cc.SpriteFrame;
@property({ type: cc.SpriteFrame })
public BG: cc.SpriteFrame = null;
public color: AvatarColor;
@property({ type: cc.Enum(AvatarColor) })
public color: AvatarColor = AvatarColor.None;
}
// /** AvatarData */
// @ccclass
// export class AvatarData extends cc.Component {
// // @property()
// // public ID: number = 0;
// // @property()
// // public Model: number = 0;
// // @property()
// // public Name: string = "";
// // @property()
// // public Desc: string = "";
// // @property({ type: cc.SpriteFrame })
// // public Pic: cc.SpriteFrame = null;
// // @property({ type: cc.SpriteFrame })
// // public BigPic: cc.SpriteFrame = null;
// // @property({ type: cc.SpriteFrame })
// // public BG: cc.SpriteFrame = null;
// // @property({ type: cc.Enum(AvatarColor) })
// // public color: AvatarColor;
// }
/** 分數結果 */
export class ScoreResult {
@@ -73,29 +122,4 @@ export class GameRecord {
public Score: number[];
}
/** GameConfig */
export class GameConfig {
/** Members */
public Members: string[];
}
/** AvatarSettings */
export class AvatarSettings {
/** Avatars */
public Avatars: AvatarData[];
}
//#endregion
//#region Enum
/** AvatarColor */
export enum AvatarColor {
None,
Pink,
Yellow
}
//#endregion

View File

@@ -19,7 +19,7 @@ export default class RecordManager {
this.Main = badminton;
}
public Init(): any {
public *Init(): IterableIterator<any> {
//
}

View File

@@ -30,9 +30,6 @@ export default class HoldButton extends cc.Component {
//#region private
/** 按钮的点击事件列表 */
private _clickEvents: cc.Component.EventHandler[] = [];
private _isOnInvoke: boolean = false;
private _m_isMouseDown: boolean = false;
@@ -44,8 +41,6 @@ export default class HoldButton extends cc.Component {
//#region Lifecycle
protected start(): void {
this._clickEvents = Array.from(this.getComponent(cc.Button).clickEvents);
this.getComponent(cc.Button).clickEvents.Clear();
if (this.HoldLine != null) {
this.HoldLine.active = false;
}
@@ -86,6 +81,8 @@ export default class HoldButton extends cc.Component {
}
if (this._m_pressDeltaTime > this.MaxTime) {
this.node.pauseSystemEvents(true);
this._isOnInvoke = true;
this._m_isMouseDown = false;
if (this.IsHaveHoldLine) {
@@ -94,7 +91,7 @@ export default class HoldButton extends cc.Component {
this._m_pressDeltaTime = 0;
if (this.OnInvoke != null) {
this.OnInvoke.forEach((eventHandler: cc.Component.EventHandler) => {
if (eventHandler.target === <any>"AddListener" && eventHandler.component === "AddListener" && eventHandler.handler) {
if (eventHandler.target === <any>"Callback" && eventHandler.component === "Callback" && eventHandler.handler) {
(<Function><unknown>eventHandler.handler)();
} else {
eventHandler.emit([this.node.getComponent(cc.Button)]);
@@ -119,31 +116,23 @@ export default class HoldButton extends cc.Component {
}
private _onTouchEnd(event: cc.Event.EventTouch): void {
this.node.resumeSystemEvents(true);
this._m_isMouseDown = false;
this._m_pressDeltaTime = 0;
if (this.IsHaveHoldLine) {
this.HoldLine.active = false;
}
if (!this._isOnInvoke) {
this._clickEvents.forEach((eventHandler: cc.Component.EventHandler) => {
eventHandler.emit([this.node.getComponent(cc.Button)]);
});
}
this._isOnInvoke = false;
this._checkHoldAutoStart(0);
}
private _onTouchCancel(event: cc.Event.EventTouch): void {
this.node.resumeSystemEvents(true);
this._m_isMouseDown = false;
this._m_pressDeltaTime = 0;
if (this.IsHaveHoldLine) {
this.HoldLine.active = false;
}
if (!this._isOnInvoke) {
this._clickEvents.forEach((eventHandler: cc.Component.EventHandler) => {
eventHandler.emit([this.node.getComponent(cc.Button)]);
});
}
this._isOnInvoke = false;
this._checkHoldAutoStart(0);
}

View File

@@ -10,8 +10,8 @@ export default class LocalStorageData {
}
// =======================================================================================
public get GameConfig(): string { return cc.sys.localStorage.getItem("GameConfig"); }
public set GameConfig(value: string) { cc.sys.localStorage.setItem("GameConfig", value); }
// public get GameConfig(): string { return cc.sys.localStorage.getItem("GameConfig"); }
// public set GameConfig(value: string) { cc.sys.localStorage.setItem("GameConfig", value); }
public get AvatarSettings(): string { return cc.sys.localStorage.getItem("AvatarSettings"); }
public set AvatarSettings(value: string) { cc.sys.localStorage.setItem("AvatarSettings", value); }

View File

@@ -22,18 +22,6 @@ declare interface Array<T> {
AddListener(call: Function): void;
}
Array.prototype.AddListener || Object.defineProperty(Array.prototype, "AddListener", {
enumerable: false,
value: function (call: Function): void {
let EventHandler: cc.Component.EventHandler = new cc.Component.EventHandler();
EventHandler.target = <any>"AddListener";
EventHandler.component = "AddListener";
EventHandler.handler = <any>call;
this.push(EventHandler);
console.log(`AddListener`);
}
});
Array.prototype.ExRemoveAt || Object.defineProperty(Array.prototype, "ExRemoveAt", {
enumerable: false,
value: function (index: number): any {
@@ -93,4 +81,15 @@ Array.prototype.ObjectSort || Object.defineProperty(Array.prototype, "ObjectSort
}
return arr;
}
});
Array.prototype.AddListener || Object.defineProperty(Array.prototype, "AddListener", {
enumerable: false,
value: function (call: Function): void {
let EventHandler: cc.Component.EventHandler = new cc.Component.EventHandler();
EventHandler.target = <any>"Callback";
EventHandler.component = "Callback";
EventHandler.handler = <any>call;
this.push(EventHandler);
}
});

View File

@@ -0,0 +1,12 @@
{
"ver": "1.1.2",
"uuid": "3e53f15a-91ce-4567-8215-226ec95a0916",
"isBundle": false,
"bundleName": "",
"priority": 1,
"compressionType": {},
"optimizeHotUpdate": {},
"inlineSpriteFrames": {},
"isRemoteBundle": {},
"subMetas": {}
}

View File

@@ -0,0 +1,13 @@
import { AvatarData } from "../Badminton/MemberData";
const { ccclass, property } = cc._decorator;
@ccclass
export default class AvatarSettings extends cc.Component {
//#region property
@property({ type: [AvatarData] })
public Avatars: AvatarData[] = [];
//#endregion
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.8",
"uuid": "fdefeb01-d27d-4efb-80b8-bc50efad3e18",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}

View File

@@ -0,0 +1,11 @@
const { ccclass, property } = cc._decorator;
@ccclass
export default class GameConfig extends cc.Component {
//#region property
@property({ type: [cc.String] })
public Members: string[] = [];
//#endregion
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.0.8",
"uuid": "f71e5db1-de2b-4f7a-8f2b-27389a68724e",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}