0

Cocos2d/Box2d を使用して「エンドレス ランナー」を作成しています。CCFollow を使用してメインのランニング キャラクターにカメラを設定しています。(はい、X 値と Y 値を非常に深くスクロールしています)。今、私はこのゲームの一部を作成しましたが、それはすでに大きすぎます。固定位置ですべてのボディ/スプライトを一度に生成しています。(X 軸の 1500 年代と Y 軸の -1500 年代のようなもの)。

しかし、最適化の問題と、ランダムな場所でランダムな高さのランダムな丘を生成する必要があるエンドレス ランナーなどのゲームの性質に関しては間違っています。4 から 5 の地形だけを使用し、それらの障害物を変更して再利用し、反復的に見えないようにするかもしれません。

地形が複雑なため、ループを使用して丘/スプライトを生成していないことを思い出してください。手作りしてます!

RayWenderlichには「小さな翼のようなゲーム」に関する優れたチュートリアルがあり、その「resetHillVertices」メソッドを調べましたが、実行時にさまざまなタイミングで生成する必要があるさまざまなスプライト/ボディがあるため、役に立ちません。ランダムな位置。どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

0

地形の上のランダムな場所でランダムなスプライトを生成しようとしていると思います。この場合、Ray Wenderlichが説明するように、「ドットを接続」タイプの地形生成方法を使用している場合、マップ生成中にオブジェクトのエントリ(実際のスプライトではなく、オブジェクトを作成するのに十分な情報)を作成できます。 (ゲームプレイ前)。

Rayのクリッピング方法を使用して、実行中にスプライトを生成し、背後のクリッピング平面を通過するときにスプライトを破棄できます。

アイテムを地形の上にランダムに配置する限り、地形のランダムな線を選択し、その線上のランダムなポイントでアイテムを「スライド」させてから、その線から離れて(空に向かって)投影することをお勧めします。何かのようなもの:

        float slope = (point2.y - point1.y) / (point2.x - point1.x);

        CGPoint randomPositionOnLine;
        randomPositionOnLine.x = point1.x + (arc4random( ) % ((int) (point2.x - point1.x)));
        randomPositionOnLine.y = randomPositionOnLine.x * slope;

        float angleOfLine = atanf(slope);

        float angleOfNormal = angleOfLine + (M_PI / 2);

        int maxHeightAboveTerrainToPlaceItem = 200;
        float heightAboveTerrain = (arc4random( ) % maxHeightAboveTerrainToPlaceItem);

        CGPoint itemPosition;
        itemPosition.x = randomPositionOnLine.x + (cosf(angleOfNormal) * heightAboveTerrain);
        itemPosition.y = randomPositionOnLine.y + (sinf(angleOfNormal) * heightAboveTerrain);
于 2012-08-08T06:35:47.833 に答える