2

AndroidでCocos2Dを使用して無限に繰り返される視差を描きたいです。現在、Objective Cでこの問題にいくつかの解決策がありますが、Androidでの実装に固執しています。使ってみました

CCSprite background = CCSprite.sprite("background_island.png");
CCTexParams params = new CCTexParams(GL10.GL_LINEAR,GL10.GL_LINEAR,GL10.GL_REPEAT,GL10.GL_REPEAT);
            background.getTexture().setTexParameters(params);

ただし、背景は1方向にしか拡張されません。2つのスプライトを使用する必要があると思います。たとえば、1つ目が終了するとすぐに、もう1つが開始し、その逆も同様ですが、実装に固執しています。

4

2 に答える 2

3

私は同じ問題を抱えていて、それを理解しました。

これを試して。背景とオフセットをメンバーとして宣言します。

CCSprite _bg;
float _bgOffset;

シーンコンストラクター:

CGSize winSize = CCDirector.sharedDirector().displaySize();
_bg = CCSprite.sprite("yourbg.png"); // needs to be square, i.e. 256x256
_bg.setTextureRect(0, 0, winSize.width, winSize.height, false);
_bg.getTexture().setTexParameters(GL10.GL_LINEAR, GL10.GL_LINEAR, GL10.GL_REPEAT,
        GL10.GL_REPEAT);
_bg.setAnchorPoint(CGPoint.zero());
this.addChild(_bg);

そして、update(float dt)メソッドでは:

if (_bgOffset > 2000000000)
    _bgOffset = 0; // don't want problems, do we?
_bgOffset += dt * PIXELS_PER_SECOND; // this can be dynamic if you want
_bg.setTextureRect(0, _bgOffset, _bg.getTextureRect().size.width,
            _bg.getTextureRect().size.height, false);

Objective Cコードについては、 http: //www.raywenderlich.com/3857/how-to-create-dynamic-textures-with-ccrendertextureの「RepeatingBackgrounds」を参照してください。

両方の方法を実行する必要がある場合は、ゼロ以外から始めて、_bgOffsetそれが機能するかどうかを確認できます。

これが誰かに役立つことを願っています!

于 2012-06-09T22:34:19.033 に答える
0

視差の垂直方向の無限の背景については、以下のリンクを確認してください:http: //kalpeshsantoki.blogspot.in/2014/07/create-vertical-endless-parallax.html

CGSize winSize = CCDirector.sharedDirector().displaySize();

//I made graphics for screen 720*1200....so I made this dynamic scale to support multiple screens
float sX = winSize.width / 720.0f;
float sY = winSize.height / 1200.0f;
background = CCVerticalParallaxNode.node(sX, sY, true);

background.addEntity(1f, "background.png", 0);
background.addEntity(3, "road_simple.png", winSize.width / 2);
background.addEntity(1.7f, "road_side.png", 0);
addChild(background);
于 2014-07-28T05:00:56.050 に答える