Scrierea unui joc pentru Android c folosind andengine

Bună ziua tuturor.
Astăzi vă voi spune cum să scrieți un joc mic folosind AndEngine. Turma sa dovedit a fi destul de mare și nu a purtat cititorul până nu ne oprim la prima parte a acestuia. Tot ce aveți nevoie de cititor este cunoașterea java, OOP și abilitatea de a gestiona Eclipse și Android SDK. Privind înainte, vom avea ceva similar cu Maze Oglinzi sau Logic cu Laser.
A doua parte a articolului.
A treia parte a articolului.

Cum să instalați Eclipse, Android SDK, să creați proiecte și să conectați biblioteca, nu o voi face, așa că vom ajunge imediat la afaceri.

Pasul 1: Pentru amatori. Puteți descărca sursele AndEngine și vă puteți conecta la proiect ca o bibliotecă Android. Sau luați din exemple deja pregătite .jar. În ambele cazuri, veți avea nevoie de Mercurial. nici nu vom mai vorbi despre asta.
Pasul 2: Proiectul este creat, toate bibliotecile sunt conectate. Acum avem nevoie de imagini. Creați un dosar în proiect:

Ei bine, sau cum vă place și aruncați acolo 2 imagini. Un fundal și laserul nostru.
Nu mai sunt necesare imagini. Pa.
Pasul 3: Ei bine, de când am început cu imaginile, vom scrie o clasă mică pe care o vom inițializa.
clasa publica Textures

textură privată mTexture;
Textură regiune privată mLaserGunTextureRegion, mBackgroundTextureRegion;

texturi publice (activitate finală BaseGameActivity, ultimul motor al motorului) Log.i ("Laser Logic", "onLoadResources");
această structură = textură nouă (1024, 512,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
acest .mLaserGunTextureRegion = TextureRegionFactory.createFromAsset (
această activitate, activitate "gfx / laser_gun.png". 800,0);
acest .mBackgroundTextureRegion = TextureRegionFactory.createFromAsset (
această activitate, activitate, "gfx / laser_logic_background.png". 0, 0);
engine.getTextureManager () loadTexture (acest element);
>

publicitate TextureRegion getBackground () retur mBackgroundTextureRegion;
>

public TextureRegion getLaserGun () returnează mLaserGunTextureRegion;
>

* Acest cod sursă a fost evidențiat prin marcatorul de coduri sursă.

Ce se întâmplă în general în acest cod? Mai întâi, vom crea mTexture, acesta va fi atlasul nostru. Este foarte important ca dimensiunile sale să fie multiple ale puterilor a două, deoarece OpenGL nu înțelege celelalte dimensiuni ale texturilor. Apoi adăugăm imagini la atlasul nostru. Și ne asigurăm că nu se amestecă. Pentru laserul nostru, un fundal transparent este foarte important, așa că, în orice caz, folosim PNG. Și pentru fundal, nu este important în ce format să îl stocați. Ei bine, și după toate manipulările am provocat o metodă loadTexture (), atunci putem folosi atlasul nostru.

Pasul 4: Texturile pe care le-am descărcat, vedeți acum ce avem.

clasa publică StageActivity extinde BaseGameActivity

statică finală privată int CAMERA_WIDTH = 800;
statică finală privată int CAMERA_HEIGHT = 480;
privat static final int NUMBER_OF_LAYERS = 2;

camera privată mCamera;
Texte private mTextures;

@ Suprascriere
public void onLoadComplete () <>

@ Suprascriere
onLoadEngine Engine publice () acest .mCamera = nou aparat foto (0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
opțiunile opțiunii EngineOptions finale = opțiuni noi EngineOptions (true,
ScreenOrientation.LANDSCAPE, noua RatioResolutionPolicy (
getScreenResolutionRatio ()), această .mCamera);
returnați motor nou (opțiuni);
>

@ Suprascriere
public void onLoadResources () mTextures = texturi noi (acest .getEngine ());
>

@ Suprascriere
Scena publică onLoadScene () Ln.i ("OnLoadScene");
acest .mEngine.registerUpdateHandler (noul FPSLogger ());

Scena scenă finală = Scena nouă (NUMBER_OF_LAYERS);
scene.setBackground (noul SpriteBackground (nou Sprite (0, 0, mTexturi
.getBackground ())));
scene.getFirstChild () atașațiChild (nou Sprite (0, 0, mTextures.getLaserGun ()));
scena revenirii;
>

float privat getScreenResolutionRatio () DisplayMetrics dm = new DisplayMetrics ();
getWindowManager () getDefaultDisplay () getMetrics (dm);
retur ((float) dm.widthPixels) / ((float) dm.heightPixels);
>

* Acest cod sursă a fost evidențiat prin marcatorul de coduri sursă.
Aceasta este activitatea noastră principală, sper că nu trebuie să explice ce este, pe care ar trebui să-l moștenim de la BaseGameActivity fără întârziere, altfel nu vom reuși. După aceasta, IDE va ​​propune să redefinească 4 metode. Ele sunt numite pentru aLoadEngine-> onLoadResources-> onLoadScene-> onLoadComplete. Să începem cu începutul lanțului, inițializăm camera și motorul propriu-zis. Vreau să acord o atenție deosebită metodei getScreenResolutionRatio (). Datorită lui, imaginea rezultată va fi întinsă pe întregul ecran. În acest caz, proporțiile nu vor fi respectate. Sau putem lăsa proporțiile camerei și apoi jocul nostru nu va ocupa întreg ecranul pe anumite dispozitive. Există, desigur, oa treia opțiune - să scriem inițializarea pentru toate dimensiunile ecranului, dar, desigur, nu vom face acest lucru acum.

Apoi, încărcați texturile noastre, pe care le folosim apoi în onLoadScene. FPSLogger - va scoate cadrul în jurnale. Un design ciudat al scene.getFirstChild () va returna o referință la stratul superior al scenei noastre. Desigur, putem face fără stratul superior prin adăugarea de obiecte direct la scenă, dar știind la ce strat este adăugat obiectul este și mai convenabil.
Acum vedem ce sa întâmplat.

Scrierea unui joc pentru Android c folosind andengine

Pentru prima parte este suficient. Puteți găsi codul proiectului pe SourceForge.
Vă mulțumesc pentru atenție.

Articole similare