2012-06-18 1 views
0

Не могли бы вы помочь с бесконечным фоном для уровня?бесконечный фон для уровня

В настоящее время я пишу примитивную игру с использованием slick2d, игровой процесс похож на Марио.

У меня есть две картинки - img1 и img2 (оба 1280x480, а разрешение экрана 640x480). Изначально X of img2 == (X of img1 + ширина img1). То есть его приклеивают к концу img1. Когда img1 находится на границе с левым экраном, координата X становится img2X + imgWidth.

Логика выглядит правильно для меня, но иногда снимки перегружены (много, примерно на 1/4 экрана). Есть ли ошибки в логике? Хороший ли подход? Может быть, есть более простой и правильный способ сделать это?

псевдо-код выглядеть, как показано ниже:

class BkgDrawer { 


Image img1 = new Image("imgs/background/bkg1.png"); 
Image img2 = new Image("imgs/background/bkg2.png"); 

int img1Width = img1.getWidth(); //1280 
int img2Width = img2.getWidth(); //1280 
int screenResolution = game.getResolution; //640 

Vector2f position1 = new Vector2f (0,0); 
Vector2f position2 = new Vector2f (position1.x+img1.getWidth(), 0); //initially position2 is glued to the end of img1 

public void render( ) { 
    if (position1.x + img1Width < 0) { //the img is over the left border of the screen 
     position1.x = position2.x + img2Width; //glue it to the end of img2 
    } 
//the same for the img2 
    if (position2.x + img2Width < 0) { //the img is over the left border of the screen 
     position2.x = position1.x + img2Width; //glue it to the end of img2 
    } 
    img1.draw(position1.x, position1.y); 
    img2.draw(position2.x, position2.y); 
    //move coordinate to get the background moving. 
    position1.x -= MOVING_STEP; 
    position2.x -= MOVING_STEP; 
    } 
} 

Извините за много текста, и благодаря

+0

Это происходит только некоторое время? –

ответ

0

я нашел только одну ошибку, и она будет иметь только аффект, если оба изображения имеют разные width: Ваши две инструкции if используют ту же ширину. img2Width

Возможно, вы заметили, что у вас есть дубликат кода для обработки рендеринга и изменения положения каждого фона. Могу я предположить, что вы реорганизуете фоновый код в класс фона, который содержит фоновое изображение, позицию и метод обновления, который репозиционирует его с помощью MOVING_STEP. Вы избежите ошибок, подобных тому, что я упоминал выше.

+0

Спасибо за советы. Это просто упрощенный код, который я написал, чтобы показать алгоритм и не беспокоить сообщество с точным сложным кодом. –