[WiEngine 게임 엔진] 기본 (1) 요정 추가

5866 단어 게임 엔진WiEngine
이 데모를 통해 WiEngine이 게임을 만드는 기본 절차를 이해하고 코드를 보기 전에 기본 개념을 알아보겠습니다.
copy 자체 홈페이지:
기본 개념
좌표계
안드로이드의 기본 좌표계는 원점이 왼쪽 상단에 있고 x축과 y축의 정방향은 오른쪽과 아래쪽입니다.OpenGL의 좌표계는 원점이 왼쪽 아래에 있고 x와 y축의 정방향은 오른쪽과 위쪽이다.WiEngine은 OpenGL의 좌표계를 사용하기 때문에 일부 좌표를 설정할 때 왼쪽 아래쪽을 기준으로 해야 합니다.
장면(Scene)
응용이든 게임이든 모두 하나의 인터페이스로 구성된 것으로 볼 수 있고 인터페이스 간의 이동은 이 응용이나 게임의 조작 절차를 형성했다.WiEngine에서는 이러한 인터페이스를 장면이라고 합니다.하나의 전형적인 게임은 불러오는 인터페이스를 포함하고 하나의 메뉴 인터페이스에 게임 인터페이스를 추가하면 세 개의 장면으로 나눌 수 있다.WiEngine은 장면 간에 전환하는 다양한 효과를 지원하는 장면 객체를 제공합니다.
노드
클래스 구조에서 볼 때 장면은 맨 윗부분의 클래스가 아니라 실제로는 노드의 하위 클래스이다.노드는 WiEngine의 최상위 개념으로 게임의 어떤'물건'을 대표한다.Java의 Object 클래스와 유사한 예를 들어 적절하지 않은 예를 들어 보십시오.Node 클래스는 메뉴, 예를 들어 스티커 등 여러 종류의 부류이다.노드는 하위 노드를 포함할 수 있기 때문에 하나의 트리 구조를 형성할 수 있으며 게임을 그릴 때 뿌리부터 모든 노드를 그릴 때까지 한 프레임의 렌더링을 완성한다.
노드는 비교적 기본적이고 관건적인 개념이 있다.
크기: 노드는 일반적으로 크기가 있습니다. setContentSize를 통해 노드의 크기를 설정할 수 있습니다.크기가 0이어도 괜찮아요, 꼭 필요하면..
앵커 포인트(Anchor): 앵커 포인트는 노드 자체의 좌표계를 기준으로 하며 setAnchorPercent 방법으로 앵커 포인트의 상대적 위치를 설정합니다.예를 들어 닻점은 (0.5,0.5)이고 노드의 크기는 100이다×200, 그러면 이 닻점은 이 노드의 좌표에 비해 (50, 100)이다.노드의 기본 앵커 위치는 (0.5, 0.5)입니다. 즉, 노드의 중간입니다
위치: 노드의 위치는 setPosition 방법으로 설정할 수 있습니다.그러나 위치는 relativeAnchorPoint 플래그의 영향을 받는 점을 구체적으로 나타냅니다.이 표지가true일 때 위치와 닻점은 같은 점이고false일 때 위치는 노드의 왼쪽 하단을 나타내며 닻점과 다른 점이다.이 논리는 이해하기 좀 이상할 수도 있다. WiEngine이 코코스2d의 일부 명칭을 참고했기 때문에 이 표지의 명칭도 계속 사용되었다.그러나 우리는relativeAnchorPoint라는 표지의 이름이 이해하기 어려울 것 같아서 WiEngine의 후속 버전에서 이 표지의 이름을 수정하는 것을 배제하지 않는다.relativeAnchorPoint는true든false든간에 회전, 축소 등 일부 기본적인 조작은 노드의 닻점에 따라 진행된다
감독(Director)
감독으로 번역한 건 맞는데 느낌이 이상하니까 다이렉트로 해요.Director는 단일 모드로 게임이 끝날 때 Director의 방법을 사용해서 초기화하거나 소각해야 한다.Director는 장면을 관리하는 방법을 제공했다. 예를 들어runWithScene,pushScene,replaceScene 등이다. 이런 API를 통해 각 장면 사이를 전환할 수 있다.
Director를 통해 시스템 정보를 설정하거나 얻을 수 있다. 예를 들어 OpenGL과 관련된 설정을 조정하고 화면 크기를 얻을 수 있기 때문에 Director는 개발자와 WiEngine 시스템 간의 다리이기도 하다.
레이어(Layer)
층도 노드의 하위 클래스로 장면의 하위 노드로 장면에 가입할 수 있다.그래서 장면에도 여러 층이 있을 수 있고 수요에 따라 서로 다른 층을 나타낼 수 있다. 물론 너도 층을 사용하지 않아도 된다. 이런 것들은 모두 네가 파악해야 한다.
엘프(Sprite)
Sprite는 WiEngine에서 주로 하나의 이미지 관련 자원을 대표한다. 예를 들어 어떤 PNG 이미지에 불러온 인물 이미지이다.스prite는 노드의 하위 클래스이기 때문에 스prite는 노드가 가져야 할 특성을 가지고 있다.그리고 또 하나의Atlas Sprite는 그림의 출처가 다르기 때문에 다음 소절을 보십시오.
그림 갤러리(Atlas)
OpenGL은 스티커의 넓이와 높은 사이즈에 대해 2의 정수 멱을 요구한다. 즉, 길이는 반드시 2, 4, 8, 16, 32, 64 등등이다.그러나 대부분의 경우 그림이 이 크기에 맞지 않는다. 그러면 모든 그림이 메모리를 낭비할 수 있고 누적되면 비교적 볼 만하다.자원을 절약하기 위해서 몇 장의 그림을 한 장 한 장 크게 묶을 수 있는데 이 큰 그림을 그림집이라고 부른다.사용할 때, 그림집은 전체적으로 불러오지만, 그릴 때 지정한 부분만 그릴 수 있어, 마치 한 장의 그림과 같다.Atlas Sprite는 이 Sprite가 특정한 그림 모음에서 나온 것을 말한다. 보통 Texture Atlas와 결합해서 사용해야 한다. 그림의 불러오는 작업은 Texture Atlas에서 이루어진다. Atlas Sprite는 그림 그리는 영역과 관련된 좌표를 지정할 뿐이다.
액션(Action)
게임에서 자주 애니메이션이나 상호작용을 해야 하는데 Action은 이런 수요에 유니버설 프레임워크를 제공한다.Action은 효과를 어떻게 해야 하는지 설명하고 노드는 효과의 캐리어입니다. Node를 통해.runaction () 방법, 임의의 노드에서 Action을 실행할 수 있습니다.Action에는 여러 개의 하위 클래스가 있는데 각각 하나의 동작이나 효과에 대응하고 여러 개의 Action이 조합되어 새로운 효과를 구성할 수 있다. 예를 들어 회전하고 축소할 수 있다. ===================================================================================================================================
WiEngine 라이브러리를 가져오고 Activity를 만들고 IDirectorLifecycleListener 인터페이스를 구현하는 안드로이드 프로젝트를 만듭니다. 코드는 다음과 같습니다.
public class MainActivity extends Activity implements IDirectorLifecycleListener
{
	static
	{
		System.loadLibrary("wiskia");
		System.loadLibrary("xml2");
		System.loadLibrary("wiengine");
		System.loadLibrary("wiengine_binding");
		System.loadLibrary("lua");
		System.loadLibrary("chipmunk");
		System.loadLibrary("box2d");
		System.loadLibrary("wisound");
	}
	protected WYGLSurfaceView	mGLSurfaceView;
	protected Scene				mScene;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);

		mGLSurfaceView = new WYGLSurfaceView(this);
		setContentView(mGLSurfaceView);
		//     FPS
		Director.getInstance().setDisplayFPS(true);
		//            
		Director.getInstance().addLifecycleListener(this);

	}

	private void createScene()
	{
		//       ,        Layer
		mScene = Scene.make();
		mScene.addChild(new VLayer());
		mScene.autoRelease(true);
	}

	@Override
	public void onSurfaceChanged(int arg0, int arg1)
	{
		createScene();
		//     
		Director.getInstance().runWithScene(mScene);
	}

	@Override
	public void onSurfaceCreated()
	{
	}

	@Override
	public void onSurfaceDestroyed()
	{
	}

	@Override
	protected void onDestroy()
	{
		Director.getInstance().end();
		super.onDestroy();
	}

	@Override
	protected void onPause()
	{
		super.onPause();
		Director.getInstance().pause();
	}

	@Override
	protected void onResume()
	{
		super.onResume();
		Director.getInstance().resume();
	}

	@Override
	public void onDirectorEnded()
	{
	}

	@Override
	public void onDirectorPaused()
	{
	}

	@Override
	public void onDirectorResumed()
	{
	}

	@Override
	public void onDirectorScreenCaptured(String arg0)
	{
	}
}

Activity 뷰는 WYGLSurfaceView입니다.
mScene = Scene.make(); mScene.addChild(new VLayer()); mScene.autoRelease(true);
장면 mScene을 만들고 Layer를 추가했습니다. 다음은 Vlayer의 구체적인 구현입니다.
VLayer.java
public class VLayer extends Layer implements INodeVirtualMethods
{
	private Sprite	mSprite;

	public VLayer()
	{
		//     
		mSprite = Sprite.make(R.drawable.role_3_0);
		addChild(mSprite);
		//        
		mSprite.setPosition(100, 200);
	}

	@Override
	public void jDraw()
	{
		// TODO Auto-generated method stub
	}

	@Override
	public void jOnEnter()
	{
		// TODO Auto-generated method stub
	}

	@Override
	public void jOnEnterTransitionDidFinish()
	{
		// TODO Auto-generated method stub
	}

	@Override
	public void jOnExit()
	{
		// TODO Auto-generated method stub
	}
}

국제 관례, 위 그림:
전재는 출처를 밝혀 주십시오.http://blog.csdn.net/Vestigge

좋은 웹페이지 즐겨찾기