본문 바로가기

프로그래밍/libGDX 엔진

libGDX #7 게임화면 구조와 움직이는 도로

우리는 지금까지 게임의 기본적인 메뉴들까지 만들었습니다. 이제 본격적으로 어떤 게임을 만들지에 대해 생각해 봐야 합니다. 저는 간단한 레이싱 게임을 만들 예정입니다. 레이싱 게임이라해도 핸드폰 미니게임 수준 정도라 보면 됩니다. 일단, 메인메뉴에서 Start Game 버튼을 누를 시, 게임 화면으로 이동 될 수 있도록 만들어 봅시다. 게임 화면은 LevelScreen이라는 이름으로 불리게 될 것인데, 게임 레벨의 따라서 난이도를 조정할 수 있게 추후, 추가해볼 예정이기 때문이다.


MenuScreen의 show() 에서 아래 부분을 찾아 실제 게임으로 이동하는 코드를 추가하자. 한 줄 추가하면 된다.

@Override
public void touchUp(InputEvent event, float x, float y,
		int pointer, int button) {
	super.touchUp(event, x, y, pointer, button);
	// 실제 게임화면으로 이동하자~
	Gdx.app.log(PugGame.LOG, "실제 게임화면으로 이동 구현!");
	game.setScreen(new LevelScreen(game));
}


이제 빨간줄이 생기는 LevelScreen으로 가서 create를 시켜주자. 그리고, 아래와 같이 LevelScreen을 구현하였다.

package com.dpug.puggame.screen;

import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.dpug.puggame.PugGame;
import com.dpug.puggame.model.LoadBackground;

public class LevelScreen extends AbstractScreen {

	public LevelScreen(PugGame game) {
		super(game);
	}

	@Override
	public void show() {
		super.show();
		Table table = super.getTable();
		table.setBounds(0, 0, 800, 500);
		table.setClip(true);
		LoadBackground loadBackground = new LoadBackground(table.getWidth(),
				table.getHeight());
		table.addActor(loadBackground);
	}
}

우선 레벨은 신경쓰지 않고, 게임 시작시 움직이는 도로만 구현해보기로 했다. 먼저, 화면에 테이블을 깔고 크기를 지정했다. 그 후, 테이블 사이즈만큼의 크기를 갖는 도로 배경을 가져와 테이블 Actor로 추가하였다. 도로가 구현되어있는 코드도 아래 소개하겠다. 그 전에, 사용하게 될, 도로 이미지를 첨부하겠다.

해당 이미지를 다운받아, 텍스쳐로 만들어주자. 텍스쳐로 만드는 방법은 이전에 포스팅했던 글을 참조하자.



이전에 했던, splash 이미지처럼 같은 폴더에 위 도로 이미지만 넣고 텍스쳐패커 메인 클래스 실행이면 끝날 일이다.

이제 텍스쳐를 만들었으니 도로 클래스를 구현해보자.

package com.dpug.puggame.model;

import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.dpug.puggame.screen.AbstractScreen;

public class LoadBackground extends Actor {

	public LoadBackground(float width, float height) {
		setWidth(width);
		setHeight(height);
		setPosition(width, 0);
		addAction(Actions.forever(Actions.sequence(Actions.moveTo(0, 0, 1f),
				Actions.moveTo(width, 0))));
	}

	@Override
	public void draw(SpriteBatch batch, float parentAlpha) {
		super.draw(batch, parentAlpha);
		TextureAtlas atlas = AbstractScreen.atlas;
		TextureRegion road = atlas.findRegion("level-screen/road");
		batch.draw(road, getX() - getWidth(), getY(), getWidth() * 2,
				getHeight());
	}

}

도로도 배경이지만 계속 움직이는 하나의 Actor가 됨으로, Actor를 상속받았다. 무한히 움직이는 도로를 만들기 위해 Action에 forever 효과를 주었다. 그리고, 방금 전 만든 도로 텍스쳐를 가져와 그려주게하여 구현을 끝냈다.


이제, 작업은 다 끝났다. 실제로 게임을 실행시켜 Start Game 버튼을 눌러보면 아래와 같이 무한이 움직이는 도로가 나오게 된다. 스크린샷이라 정적이지만 실제로는 계속 움직이고 있다.