
Webデザインには、あなたの知らない「落とし穴」がたくさん。大きなものから小さなものまで、それが及ぼす影響はさまざまだ。カンペキだと思っているあなたのサイトも、実はすでに暗い穴の中かも・・・。
 |
if文を使ったKey.isDownの落とし穴
|
 |
Flashでは、if (Key.isDown(Key.LEFT)) などを使って「もし左キーを押したら○○を実行」という命令をすることがある。
オブジェクト操作をする場合、if (Key.isDown(Key.LEFT)) に「_x-=5」を入れると、左キーを押せばオブジェクトは左に動く。さらにelse if (Key.isDown(Key.UP))に「_y-=5」を入れて、上キーを押せば上に動く。
ただし、このキーを両方押した場合、else ifのほうは無視されてしまうので、左に動くだけになってしまう【1】。斜めに動かしたい場合は、UPの部分を「else if」ではなく「if」で命令してあげればよい。あとはそれぞれの方向キーに同じように「if」で設定する。しかし、変数を使ってオブジェクト操作させる場合は、「else if」を使う場合もあるので使い分けが必要だ。
たとえば、オブジェクトを右と左に同時に動かすことはできないので、このふたつは「else if」で設定しても問題ない。また上下も同じことがいえる。それを考えたうえで、変数を使ってスピードが徐々に上がっていくようなスクリプトをひとつの例として紹介する【2】。
このスクリプトは、まず動かしたいオブジェクトがロードされる瞬間の「_root.x」、「_root.y」という変数に「0」を入れる。この変数が速度のような意味をもつ。左キーや上キーを押すことで、その「_root.x」、「_root.y」という変数が1ずつ加減する。この変数をオブジェクトのx軸、y軸に代入していくことで1ずつ速度が上がるという動きになっている。また、進んでいる方向と逆の方向を押すと、現在の「_root.x」、「_root.y」から1ずつ減っていくので、速度が徐々に遅くなっていく。
| |
onClipEvent (enterFrame) {
if (Key.isDown(Key.LEFT)) {
this._x-=5;
} else if (Key.isDown(Key.UP)) {
this._y-=4;
}
} |
【1】斜めに動かせない命令
|
onClipEvent (load) {
_root.x=0;
_root.y=0;
}
onClipEvent (enterFrame) {
if (Key.isDown(Key.LEFT)) {
_root.x--;
} else if (Key.isDown(Key.RIGHT)) {
_root.x++;
}
if (Key.isDown(Key.UP)) {
_root.y--;
} else if (Key.isDown(Key.DOWN)) {
_root.y++;
}
this._x+=_root.x;
this._y+=_root.y;
}
|
【2】変数を用いたオブジェクト操作スクリプト例
解説:マルチカ
(※本文中、及びキャプション内で使用している「<」、「>」は、全角になります。ご注意ください。)