Повторение параллакса с использованием Cocos2D на Android - PullRequest
2 голосов
/ 19 декабря 2011

Я хочу нарисовать бесконечно повторяющийся параллакс, используя Cocos2D на Android. Теперь в 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-й закончится, другой запустится и наоборот, но я застрял с реализацией.

Ответы [ 2 ]

3 голосов
/ 10 июня 2012

У меня была такая же проблема и я разобрался.

Попробуй это. Объявите фон и смещение в качестве члена:

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);

И в вашем методе обновления (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);

См. "Повторение фона" в http://www.raywenderlich.com/3857/how-to-create-dynamic-textures-with-ccrendertexture для кода Objective C

Если вам нужно пойти в обе стороны, возможно, вы могли бы начать с ненулевого _bgOffset и посмотреть, работает ли это.

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 28 июля 2014

Пожалуйста, проверьте ссылку ниже для вертикального бесконечного фона Параллакса: 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);
...