cocos2d-x:高頻度scheduleの問題

v3.11.1でも発生

以前記事にした「3.6だとOKだけど3.10でクラッシュする問題」ですが、v3.11.1でも発生しました(AndroidだけでなくiOSでも…)。しかも50fpsに設定しても「たまに」クラッシュしてしまいます。

update

scheduleではなくupdateにすると大丈夫なので、今後はupdateを利用していこうと思います。

scheduleを利用したい場合

どうしてもscheduleを利用したい場合は、thisの型を取得して比較し、目的のクラス(例えばEnemyBullet)でない場合はreturnしてthisを利用する前に処理を抜けるようにします(少々強引か…)。型を調べるのは以下のサイトが参考になりました。
→参考:Cocos2d-x v3:Nodeの種類を特定する
 
cocos2dの基本クラスは「N」で始まるようなので、以下のように処理を書きました。
———————————
if (typeid(*this).name()[0] == ‘N’){
 CCLOG(“error return”);
 return;
}
———————————
クラッシュの原因はthisが参照できずsetPositionなどでEXC_BAD_ACCESSになってしまうことなのですが、this自体はNodeとして値が取得できます。なので、この方法でthis(EnemyBullet等のクラス)が取得できず、ただのNode扱いになってしまう場合に回避処理を取ることができるのです(たぶん)。
 
 
 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


三 + = 7


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>