수색…


버전

번역 출시일
1.9.3 2016-05-16
1.9.5 2016-12-11

설치 또는 설정

LibGDX는 간단한 Java 프로그램의 도움으로 상당히 간단한 설정을합니다. 여기 에서 다운로드 할 수 있습니다 . 응용 프로그램을 시작하면 다음과 같이 표시됩니다. LibGDX 프로젝트 생성기의 예
참고 :이 스크린 샷은 Linux에서 가져 왔으며 Windows 설치와 다른 경로를 보여줍니다. 그러나 양식은이 설정 응용 프로그램과 호환되는 모든 OS에서 동일합니다

입력 상자

"이름"입력 상자에 프로젝트의 게임 이름을 입력하십시오. "패키지"입력 상자는 기본 클래스에 대한 패키지입니다. "Game Class"입력 상자는 게임이 실행될 때 호출되는 기본 클래스입니다. "대상"입력 상자는 프로젝트가 생성 될 대상입니다. "Andriod SDK"입력 상자, 안드로이드 SDK가있는 경로. 이 입력란은 완전히 선택 사항이므로 Android에 애플리케이션을 배포하고 싶지 않은 경우 걱정하지 않아도됩니다.


하위 프로젝트

하위 프로젝트는 배포 대상 플랫폼 일뿐입니다. 그 부분은 꽤 자명하다. 예를 들어 HTML에 배치하지 않으려면 확인란의 선택을 취소하면됩니다.


확장 프로그램

확장은 공식 LibGDX 확장입니다. 다음은 각각 무엇인지 알려주는 표입니다.

확장자 이름 기술
총알 Bullet은 3D Collision Detection 및 Rigid Body Dynamics Library입니다.
프리 스타일 Freetype을 사용하면 비트 맵 글꼴을 사용하지 않고 .ttf 글꼴을 사용할 수 있습니다.
도구들 LibGDX 도구의 출력을 구현할 수 있습니다.
컨트롤러 XBox 360 컨트롤러와 같은 컨트롤러를 구현할 수 있습니다.
Box2d 2 차원 게임을위한 물리학 라이브러리.
Box2dlights 물리 게임에 부드러운 동적 조명을 추가하는 쉬운 방법을 제공합니다.
애쉴리 작은 엔티티 프레임 워크
일체 포함 인공 지능 프레임 워크.

타사 확장을 추가 할 수 있지만 세부 정보 나 이름은 여기에 표시되지 않습니다.


많은

고급 섹션에서 여러 설정을 설정하고 Eclipse 및 IDEA IDE에 대한 추가 프로젝트 파일을 생성 할 수 있습니다.

이름 설정 기술
메이븐 미러 URL Maven Central을 제공된 Maven URL로 대체합니다.
생각 Intellij IDEA 프로젝트 파일을 생성합니다.
Eclipse 프로젝트 파일 생성
오프라인 모드 종속성 다운로드 강제 실행 금지

세대

모든 설정이 정확하면 "생성"버튼을 누르십시오. 이 작업은 몇 초가 걸릴 수 있지만 기본 파일을 생성하고 프로젝트에 필요한 Gradle을 생성합니다. 일단 IDE로 프로젝트를 가져올 차례입니다.

LibGDX Hello World

기초

생성 된 프로젝트에는 이미 구현 된 기본 Hello World와 유사한 애플리케이션이 포함되어 있습니다.

주요 프로젝트는 모든 플랫폼 독립적 인 코드를 포함하는 핵심 프로젝트입니다. 이것은 의무 사항이지만 세대 설정에 따라 선택한 모든 플랫폼에 대해 더 많은 프로젝트를 가질 수 있습니다.

예제

core 프로젝트에서 com.mygdx.game.MyGdxGame.java 를 엽니 다. 다음 코드가 표시됩니다.

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    
    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }
    
    @Override
    public void dispose () {
        batch.dispose();
        img.dispose();
    }
} 

이 프로젝트는 메인 프로젝트이지만 직접 실행하지 않고 항상 플랫폼 별 Launcher를 실행해야합니다. desktop 경우 desktop 프로젝트에서 com.mygdx.game.desktop.DesktopLauncher.java 라고합니다.

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new MyGdxGame(), config);
    }
} 

이 클래스에서는 플랫폼 별 설정을 지정할 수 있습니다.


게임 실행하기

Eclipse와 Intellij는 두 가지 방법을 사용하여 프로젝트를 실행합니다. 아래에서 IDE를 찾으십시오.

Eclipse를 사용하여 실행

Eclipse를 사용하여이 클래스를 Java 응용 프로그램으로 실행하여 응용 프로그램을 실행할 수 있습니다 (프로젝트에서 마우스 오른쪽 단추로 클릭 -> 실행 -> Java 응용 프로그램). 다음 창이 표시됩니다.

데스크톱에서 Hello World 실행하기

Intellij 아이디어를 사용하여 실행

Intellij에서는 실행 구성을 만들어야합니다. 이렇게하려면 아래 오른쪽 당근처럼 보이는 오른쪽 상단의 버튼을 클릭해야합니다.

당근

그런 다음 "Edit Configurations ..."버튼을 클릭하십시오. 현재 실행중인 모든 구성의 화면이 나타납니다. 창 왼쪽 상단의 "+"를 클릭하고 "응용 프로그램"옵션을 선택하십시오. 그곳에서 "Main class"옵션의 "DesktopLauncher"파일을 선택하고 "module의 클래스 경로 사용"을 core 옵션으로 설정하고 "Working directory"를 코어 폴더의 assets 폴더로 설정하십시오. 최종 제품은 다음과 같이 보일 것입니다.

실행 구성 예제

이 작업을 완료하면 실행 구성의 이름을 선택하고 "적용"을 클릭 한 다음 "확인"을 클릭 할 수 있습니다. 완료되면 오른쪽 상단의 녹색 실행 아이콘을 클릭하십시오.

실행 아이콘

MyGdxGame 클래스에서 어떤 일이 일어나고 있습니까?

먼저 create 메소드가 호출되어 화면에 그려지는 일괄 처리를 초기화합니다. 그런 다음 badlogic.jpg를 메모리에로드합니다.

이 후 응용 프로그램이 중지 될 때까지 render 메소드가 반복적으로 호출됩니다. 이 메서드는 배경색을 빨간색으로 재설정하고 이미지를 화면에 그립니다. 보시다시피 배치 도면을 항상 시작하고 끝내야합니다. 마지막으로 응용 프로그램이 중단 될 때 dispose 메서드가 호출되면 텍스처와 배치에서 사용되는 메모리 공간이 확보됩니다.

(애플리케이션이 배경에있을 때 안드로이드가 메모리 공간을 확보 할 수 있기 때문에, 안드로이드와 같은 다른 플랫폼에서도 런타임에 폐기가 발생할 수 있다는 것을 알고있는 것이 좋다. 그러나 이것은 더 진보 된 주제이다)



참고 : 아래 실행과 관련하여 오류가 발생하면이 질문에 대한 답을 확인하십시오!

파일을 찾을 수 없음 : badlogic.jpg (내부)

LibGDX 일반 개요

LibGDX는 Java로 개발 된 무료 오픈 소스 게임 개발 라이브러리입니다. 목표는 사용자가 데스크톱, Android, iOS 및 웹 브라우저에서 실행되는 교차 플랫폼 게임을 개발할 수 있도록하는 것입니다. 코드를 작성한 후 주요 플랫폼에 배치하십시오.

플랫폼 특정 코드에 대한 지원 추가

LibGDX는 동일한 코드를 작성하여 여러 플랫폼에 배포 할 수있는 방법으로 설계되었습니다. 그러나 플랫폼 특정 코드에 액세스하려는 경우가 있습니다. 예를 들어 게임에 리더 보드와 업적이있는 경우 로컬로 저장하는 것 외에도 플랫폼 별 도구 (예 : Google Play 게임)를 사용할 수 있습니다. 또는 데이터베이스를 사용하거나 완전히 다른 것을 사용하려고합니다.

이러한 종류의 코드를 코어 모듈에 추가 할 수 없습니다. 첫 번째 단계는 인터페이스를 만드는 것입니다. 코어 모듈에 생성하십시오. 이 첫 번째 인터페이스는 다른 인터페이스를 관리하는 유틸리티입니다.

public interface PlatformWrapper{
    //here you can also add other things you need that are platform specific.
    //If you want to create your own file saver for an instance, a JSON based database,
    //achievements, leaderboards, in app purchases and anything else you need platform specific code for.
    SQLWrapper getSQLSaver();//This one will be used in this example
    AchievementWrapper getAchievementHandler();//this line is here as an example
}

그런 다음 두 번째 인터페이스 인 SQLWrapper를 만들어야합니다. 이것은 또한 핵심 모듈에 들어갑니다.

public interface SQLWrapper{
    void init(String DATABASE);
    void saveSerializable(int id, Object o);
    Object loadSerializable(int id, Object o);
    void saveString(int id, String s);
    //.... and other methods you need here. This is something that varies
    //with usage. You may not need the serializable methods, but really need a custom method for saving 
    //an entire game world. This part is entirely up to you to find what methods you need
   
    //With these three methods, always assume it is the active database in question. Unless 
    //otherwise specified, it most likely is
    String getActiveDatabase();
    void deleteDatabase();
    void deleteTable(String table);//delete the active table
}

이제는 모든 프로젝트에 참여하여 PlatformWrapper를 구현하는 클래스를 만들고 SQLWrapper를 구현해야합니다. 각 프로젝트에서 인스턴스, 생성자 등과 같은 필요한 코드를 추가합니다.

모든 인터페이스를 오버라이드 한 후에는 모두 PlatformWrapper를 구현하는 클래스에 인스턴스가 있어야하며 getter가 있어야합니다. 마지막으로 주 클래스의 생성자를 변경합니다. 기본 클래스는 런처에서 참조하는 클래스입니다. ApplicationAdapter를 확장하거나 ApplicationListener를 구현하거나 Game을 확장합니다. 생성자를 편집하고 PlatformWrapper를 인수로 추가하십시오. 플랫폼 래퍼에는 다른 래퍼 (SQL, 업적 또는 추가 한 다른 모든 래퍼) 외에 일부 유틸리티 (추가 한 경우)가 있습니다.

이제 모든 것이 올바르게 설정되면 PlatformWrapper를 호출하고 플랫폼 간 인터페이스를 얻을 수 있습니다. 어떤 메소드라도 호출하고 (실행 된 코드가 정확하다고 가정하면) 모든 플랫폼에서 볼 수 있습니다. 플랫폼 특정 코드로 수행되는 작업을 수행합니다

자산 관리자

AssetManager는 자산을 관리하는 데 도움이되는 클래스입니다.

먼저 인스턴스를 만들어야합니다.

AssetManager am = new AssetManager();

초기화가 끝나고 렌더링하기 전에 리소스를 얻으려고합니다.

am.load("badlogic.jpg", Texture.class);//Texture.class is the class this asset is of. If it is a 
//sound asset, it doesn't go under Texture. if it is a 3D model, it doesn't go under Texture.class
//Which class added depends on the asset you load

//... other loading here ...//

//when finished, call finishLoading:
am.finishLoading();

이제, 당신은 badlogic.jpg 얻는 기분이 badlogic.jpg .

Texture texture = am.get("badlogic.jpg");
//Ready to render! The rendering itself is in the normal way

AssetManager를 사용하면 AssetManager의 메모리에 한 번로드 한 다음 원하는만큼 여러 번 가져올 수 있습니다.

AssetManager를 사용하는 이유는 무엇입니까? ( 위키에서 ) :

AssetManager (코드)는 자산을로드하고 관리하는 데 도움을줍니다. 다음과 같은 좋은 행동 때문에 자산을로드하는 것이 좋습니다.

  • 대부분의 리소스로드는 비동기 적으로 수행되므로로드하는 동안 반응로드 스크린을 표시 할 수 있습니다.
  • 자산은 참조 계산됩니다. 두 자산 A와 B가 둘 다 다른 자산 C에 의존하는 경우 C는 A와 B가 처분 될 때까지 처분되지 않습니다. 이것은 자산을 여러 번로드하면 실제로 공유되고 메모리를 한 번만 차지한다는 것을 의미합니다!
  • 모든 자산을 저장할 수있는 단일 장소.
  • 캐시와 같은 것을 투명하게 구현할 수 있습니다 (아래 FileHandleResolver 참조).

2D 장면 그래프

Java 또는 Android를 시작하면 맨 위 왼쪽 구석에 (0,0)이 있음을 알게됩니다. 그러나 LibGDX에서는 기본적으로 왼쪽 하단에 (0,0)이 있습니다.

직교 카메라를 사용하면 왼쪽 상단에 (0, 0)을 표시 할 수 있습니다. 기본적으로 (0, 0)은 왼쪽 하단에 있습니다. 이는 텍스처의 모서리가 X와 Y 좌표를 갖기 때문에 알아야 할 중요한 것입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow