Adobe Animate HTML キャンバスで作成しているゲームがあります。以下の私のコードでは、すべてを組み合わせてstateItems[].stateplace1 =this.state
50 の異なるバリエーションを持たないようにする方法はありますか? state1s を StateItems の子にしようとしましたが、それでも非常にデリケートな感じがします。
stateItems と state1s が 2 つの異なる配列である場合、stateItems の最初の項目 (Florida) を最初のターゲット (state1) などに呼び出して「リンク」する方法があります。そのようなものは機能しますか?どうすればそれを行うことができますか?
私はjavascriptに非常に慣れていないので、非常に簡単な解決策があればお詫びします。
編集: StateItems は、実際のアメリカ合衆国の例の Animate の個々のシンボルです: フロリダは文字どおりのアメリカ合衆国の州なので、私のStateItem
配列の一部です。はstateplace
状態が配置される場所であり、stateplace
1 つのシンボルであり、stateplace
1 2 および 3 は stateplace のインスタンスです。the stateplace1
StateItems ループで sをクリーンアップする方法があるかどうか知りたかったので、50 はありませstateItems[0].stateplace1 = this.stateplace1;
ん。各 StateItem を対応するステートプレースに接続する別の方法がわかりませんでした。コードは必要な方法で機能しますが、少しクリーンアップする方法があるかどうかはわかりません。これで問題が解決することを願っています。
var stateItems = [this.florida, this.alabama, this.southcarolina]
// we apply the same code for each symbol with the for loop
for(var i = 0; i<stateItems.length; i++){
stateItems[i].on("mousedown", onMouseDown.bind(this));
stateItems[i].on("pressmove", onMouseMove.bind(this));
stateItems[i].on("pressup", onMouseUp.bind(this));
stateItems[0].stateplace1 = this.stateplace1;
stateItems[1].stateplace1 = this.stateplace2;
stateItems[2].stateplace1 = this.stateplace3;
stateItems[i].originX = stateItems[i].x;
stateItems[i].originY = stateItems[i].y;
}
// mouse down event
function onMouseDown(evt){
var item = evt.currentTarget;
item.offset = {x:0, y:0};
var pt = item.parent.globalToLocal(evt.stageX, evt.stageY);
item.offset.x = pt.x - item.x;
item.offset.y = pt.y - item.y;
item.drag = true;
}
// mouse up event
function onMouseUp(evt){
var item = evt.currentTarget;
item.drag = false;
var pt = item.localToLocal(item.dot.x, item.dot.y, item.state1.hitBox);
if(item.stateplace1.hitBox.hitTest(pt.x, pt.y) ){
item.x = item.stateplace1.x;
item.y = item.stateplace1.y;
item.mouseEnabled = false; // prevents object from being move when place correctly
}else{
item.x = item.originX;
item.y = item.originY;
}
}
function onMouseMove(evt){
var item = evt.currentTarget;
if (item.drag){
var pt = item.parent.globalToLocal(evt.stageX, evt.stageY);
item.x = pt.x - item.offset.x;
item.y = pt.y - item.offset.y;
}
// mouse move event
}