1

私は現在、Cocos2d for iPhoneで落書きジャンプスタイルのゲームを開発しており、ゲームオブジェクト(プラットフォーム、収集品など)とプレーヤー(キャラクター、プレーヤーによって制御される)の2つの異なるレイヤーでシーンを設定しています。

プレーヤーがジャンプしたときにゲームオブジェクトレイヤー全体を下にスクロールしたいので、これらを別々のレイヤーに配置します。これにより、垂直のDoodleJumpスタイルの感覚が得られます。

問題は、プレーヤーとプラットフォームが異なるレイヤー上にあるため、それらの間の交差が発生しないことです。

誰かがこれを解決する方法を知っていますか?convertToWorldCoordsについて言及している人もいますが、私はそれに迷っています。

4

1 に答える 1

5

はい、convertToWorldCoords!または、そのようなものです。基本的には、プレーヤーとゲームオブジェクトの位置を相互に理解する必要があります。そのための方法のひとつは、それらすべてを「世界」の座標に変換することです。または、プレーヤーの位置/長方形をゲームオブジェクトの座標系に変換することもできます。

いくつかのCGRect交差テストだけでシンプルに保ちたいですか?CCNodeカテゴリで拡張:

CCNode + CoordHelpers.h

#import "CCNode.h"

@interface CCNode (CoordHelpers)
- (CGRect) worldBoundingBox;
@end

CCNode + CoordHelpers.m

#import "CCNode+CoordHelpers.h"

@implementation CCNode (CoordHelpers)
-(CGRect)worldBoundingBox {
    CGRect rect = CGRectMake(0, 0, contentSize_.width, contentSize_.height);
    return CGRectApplyAffineTransform(rect, [self nodeToWorldTransform]);
}
@end

次に、超単純なCGRect衝突テストの場合:

if(CGRectIntersectsRect([playerObj worldBoundingBox], [otherObj worldBoundingBox])    
{/*...do stuff...*/}

#import "CCNode+CoordHelpers.h"この方法を使用する必要がある場所に必ず注意してください。

于 2012-06-13T17:05:20.350 に答える