キノコが何か作るブログ

ゲーム・ドット絵・アプリなどを作ります

MENU

ゲーム制作の進捗(26日目)

本日は、「戦闘不能処理処理がされないエネミーが存在する」というバグを修正しました。

このバグの原因は2つあります。

1つ目は、splice関数を使って配列の要素を削除した際に、lengthが短くなることを忘れていたことです。

joyplot.com

エネミーが入っている配列をsplice関数で削除すると、その分配列が短くなります。

なので、forループなどでエネミー配列をチェックする際に、

for(i = 0; i < enemies.length; i++)という条件でループさせると、途中でHP0になったエネミー要素を削除した際にlengthが1短くなります。

しかし、for文で最初に定義したenemies.lengthは短くなる前の値が入ったままなので、領域外を参照して今うことになります。

これがバグの原因の一つでした。

2つ目の原因は、数字の0がBoolean型ではfalseとして扱われることを知らなかったことです。

www.htmq.com

こちらに書かれている通り、数字の0はBoolean型ではfalseとして扱われます。

僕は、攻撃可能なエネミーがいた場合、そのエネミーの配列番号を返す関数を作っていました。そして、もし攻撃可能なエネミーがいなかった場合はfalseを返すようにしていました。

もうお気づきたと思いますが、これだと0番目のエネミーが攻撃可能だった場合、数字の0が返ってきますが0はfalseなので条件式ではじかれてしまいます。

これらがこのバグの原因でした。

 

明日はフィールドのデザインの方をやっていこうと思います。

それではまた明日。

プライバシーポリシー