Skip to content

Commit

Permalink
KeyActionで同時押しの処理を書きやすくするための仕様変更
Browse files Browse the repository at this point in the history
  • Loading branch information
inaridarkfox4231 committed Sep 2, 2024
1 parent fcc66dd commit 61e7925
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 8 deletions.
15 changes: 11 additions & 4 deletions src/foxIA.js
Original file line number Diff line number Diff line change
Expand Up @@ -805,6 +805,13 @@ const foxIA = (function(){
// キーを押したとき(activate), キーを押しているとき(update), キーを離したとき(inActivate),
// それぞれに対してイベントを設定する。
// 改変でキーコードが分かるようにするわ。

// 改善案(同時押し対応)
// isActiveが未定義の場合nullを返しているところをfalseを返すようにする
// さらにactivate,update,inActivateの関数登録で引数を持たせられるようにする。その内容は第一引数で、
// thisである。どう使うかというとたとえば(e)=>{if(e.isActive){~~~}}といった感じで「これこれのキーが押されている場合~~」
// っていう、いわゆる同時押し対応をできるようにする。その際、たとえばBを押しながらAのときに、Bを押すだけの処理が存在しないと
// isActiveがnullを返してしまうので、先のように変更したいわけです。
class KeyAction extends Interaction{
constructor(canvas, options = {}){
// keydown,keyupは何も指定せずともlistenerが登録されるようにする
Expand Down Expand Up @@ -865,7 +872,7 @@ const foxIA = (function(){
}
isActive(code){
const agent = this.keys[code];
if (agent === undefined) return null;
if (agent === undefined) return false; // 未定義の場合はfalse.
return agent.active;
}
keyDownAction(e){
Expand All @@ -880,21 +887,21 @@ const foxIA = (function(){
}
const agent = this.keys[e.code];
if (agent === undefined || agent.active) return;
agent.activate();
agent.activate(this); // this.isActiveなどの処理を可能にする。
agent.active = true;
}
update(){
for(const name of Object.keys(this.keys)){
const agent = this.keys[name];
if (agent.active) {
agent.update();
agent.update(this); // this.isActiveなどの処理を可能にする。
}
}
}
keyUpAction(e){
const agent = this.keys[e.code];
if (agent === undefined || !agent.active) return;
agent.inActivate();
agent.inActivate(this); // this.isActiveなどの処理を可能にする。
agent.active = false;
}
}
Expand Down
15 changes: 11 additions & 4 deletions src/p5wgex.js
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,13 @@ const foxIA = (function(){
// キーを押したとき(activate), キーを押しているとき(update), キーを離したとき(inActivate),
// それぞれに対してイベントを設定する。
// 改変でキーコードが分かるようにするわ。

// 改善案(同時押し対応)
// isActiveが未定義の場合nullを返しているところをfalseを返すようにする
// さらにactivate,update,inActivateの関数登録で引数を持たせられるようにする。その内容は第一引数で、
// thisである。どう使うかというとたとえば(e)=>{if(e.isActive){~~~}}といった感じで「これこれのキーが押されている場合~~」
// っていう、いわゆる同時押し対応をできるようにする。その際、たとえばBを押しながらAのときに、Bを押すだけの処理が存在しないと
// isActiveがnullを返してしまうので、先のように変更したいわけです。
class KeyAction extends Interaction{
constructor(canvas, options = {}){
// keydown,keyupは何も指定せずともlistenerが登録されるようにする
Expand Down Expand Up @@ -882,7 +889,7 @@ const foxIA = (function(){
}
isActive(code){
const agent = this.keys[code];
if (agent === undefined) return null;
if (agent === undefined) return false; // 未定義の場合はfalse.
return agent.active;
}
keyDownAction(e){
Expand All @@ -897,21 +904,21 @@ const foxIA = (function(){
}
const agent = this.keys[e.code];
if (agent === undefined || agent.active) return;
agent.activate();
agent.activate(this); // this.isActiveなどの処理を可能にする。
agent.active = true;
}
update(){
for(const name of Object.keys(this.keys)){
const agent = this.keys[name];
if (agent.active) {
agent.update();
agent.update(this); // this.isActiveなどの処理を可能にする。
}
}
}
keyUpAction(e){
const agent = this.keys[e.code];
if (agent === undefined || !agent.active) return;
agent.inActivate();
agent.inActivate(this); // this.isActiveなどの処理を可能にする。
agent.active = false;
}
}
Expand Down

0 comments on commit 61e7925

Please sign in to comment.