cocos2dを使ったアクションゲームを実装したいという試みの第6回です。 色々と問題が出てきて、ちょっと焦っていますが、今回は「加速度」「摩擦」「インターフェイス(ボタン)」を実装もしくは改良しました。 後、衝突判定で色々問題が出て来ました。
前回のエントリー 「cocos2d」でマリオのようなアクションゲームを作りたい5回目 | albatrus.com
「加速度と摩擦」を実装
今日は午前中の時間で「加速度と摩擦」を実装しました。 これで上手く行っているかどうかはわからないのですが、なんとかそれらしく見えます。
コードはこんな感じです。 [c] velocity2 = ccpAdd(velocity2, velocity);//vekocityはボタンを押すごとに一定の値が+されます。 velocity2 = ccpMult(velocity2,0.96);//摩擦を乗算しています nextvelocitypoint = ccpAdd(self.position, velocity2);//これを現在の位置に加算をします。
[/c]
ボタンを離した時てもvelocity2の値は残るので、氷を滑るように移動が継続できます。
ボタンの改良
ボタンを改良しています。 今までは「CCLayerの中にCCSpriteを設置して、CCSpriteのCGRectと画面をタッチしたCGPointが重なった時にアクションを起こす」といったインターフェイスでしたが、CCSprite自信をタッチに対応するように実験的に実装をしています。 変更を考えた理由は、ccTouchMoved:が呼び出されて、ボタンを離してもキャラクターが動いてしまうことがあったからです。
ただ、残念なことに、この新しい方法でもたまにccTouchMoved:が呼び出されてしまいます。 うーん。
もし、ボタンの実装で他に何か上手い方法があれば教えて欲しいです。
現在の問題点
現在の悩んでいる点は2点
- ボタンのccTouchMovedの問題
- Tiledで設定をしたCCTMXLayerとオブジェクトの衝突判定
Tiledで設定をしたCCTMXLayerとオブジェクトの衝突判定
マリオがジャンプ、もしくは重力で下に落ちる際に、ブロックなどに引っかかってしまう問題があります。 動画にも収録しています。
考えられる原因は、衝突判定でsprite.contentsize.widthを利用しているので、アニメーションをした時に、衝突判定が反応してしまっているのかな。と考えているのですが、そう簡単では無さそうです。 これは、今まで利用している衝突判定を含めて再度考えなおさないといけないと思っています。