タイル マップ エディター tmx ファイルからいくつかの動くタイルを作成しようとしています。独自のレイヤーに移動タイルがあり、単純に上に移動し、特定の y に達したら下に移動するなどしたいだけです。
私はこれを達成するための明確な方法を少し探し回っていますが、私の努力はうまくいきませんでした.
ここでいくつかのメソッドを使用してみました。
私はまだ cocos2d の開発全般に慣れていないので、これに関する洞察をいただければ幸いです。どうぞよろしくお願いいたします。ご不明な点がございましたら、お気軽にお問い合わせください。:) また、移動しようとしているタイルは大きな T 字型になっています。
最終更新:
(より無関係なコードを削除して、将来誰でも簡単に解決策を見つけられるようにしました (完全な回答は以下にあります)。上記のリンクでレイヤー反復メソッドを取得した場所を見つけることができます)。
わかりましたので、最終的に希望どおりに動作するようになりました..これが最も理想的な方法だとは思いませんが、これが私が持っているものです.
注:これを機能させるには、アプリをデバッグモードから実行する必要があります。そうしないと、遅延が発生したり、プレーヤーが地面に落ちたりします(少なくとも私にとってはそうでした..)。
フレームごとに特定の関数を呼び出す更新関数があります。(衝突のチェック、プラットフォームの移動など)。
その更新関数は、私の移動プラットフォーム関数を呼び出します..
このような:
[self movePlatforms:0.1];
これは私の movePlatforms 関数です..
-(void)movePlatforms: (ccTime) dt{
if(goingDown){
moveCount++;
}else{
moveCount--;
}
CGSize s = [movingTiles layerSize];
for( int x=0; x<s.width;x++) {
for( int y=0; y< s.height; y++ ) {
CCSprite *tile = [movingTiles tileAt:ccp(x,y)];
if(goingDown){
CGPoint newPosition = ccp(tile.position.x, tile.position.y - 1);
tile.position = newPosition;
if(moveCount >= 100){
goingDown = false;
}
}else{
CGPoint newPosition = ccp(tile.position.x, tile.position.y + 1);
tile.position = newPosition;
if(moveCount <= 0){
goingDown = true;
}
}
}
}
}
したがって、基本的には、movePlatform 関数が呼び出された回数を追跡するために、int moveCount と BOOL goingDown を作成しました。したがって、100回の呼び出しの後、方向が切り替わります。
(これは私にとってはうまくいきます。これを使用する場合は、衝突検出器のようなものが必要になるかもしれません)。
if (CGRectIntersectsRect([someSprite boundingBox], [someSprite boundingBox])) {
//Do something
}
これが将来誰かのために働くことを願っています.これは私にとってかなりの頭痛の種でした.おそらく正しく行われていないか、それを行うためのはるかに良い方法があります.