Linderdaum Engine adalah sebuah game engine 3D yang bersifat open source dan murni berorientasi obyek untuk platform Microsoft Windows, Google Android, dan Blackberry OS 10 yang ditulis dalam bahasa pemrograman C++. Game engine ini dirancang untuk menjadi solusi terpadu dalam pengembangan aplikasi 3D interaktif, game, industri, dan visualisasi ilmiah.
Mengatur Proses Pengembangan
Untuk pengembangan game menggunakan Linderdarum Engine, pertama-tama kamu perlu menginstal:
- Linderdaum Engine SDK 0.6.08
- OpenAL
- Python* 3 (dibutuhkan versi 3 atau terbaru)
Sebagai tambahan, kamu juga perlu menginstal perangkat lunak berikut untuk membangun proyek-proyek di Android:
Selanjutnya, kamu perlu memiliki perangkat dengan sistem operasi Android 2.2 atau versi terbarunya untuk menguji produk yang dikembangkan. Supaya Android NDK dapat berjalan dengan baik, nama folder tempat kamu menginstal Linderdaum SDK sebaiknya tidak memiliki spasi.
Linderdium SDK dapat membangun library dalam bentuk yang telah dikompilasi (masukkan Libs.Win32/Libs.Win64 dan BuildAndroid/jni), sehingga yang harus kamu lakukan adalah melakukan pembaruan meta-information dan membangun file.
Pertama-tama jalankan biner dari repositori dengan SDK menggunakan rebuildLSD.py dan kemudian makeconfig.py. Sekarang kamu telah memiliki yang dibutuhkan untuk pengembangan dan kamu dapat mulai menulis aplikasi lintas platform.
Aplikasi HelloAndroid
Supaya tidak membebani bagian-bagian dari engine dan untuk menguraikan aspek-aspek lintas platform, maka kita akan bekerja dengan aplikasi 3D yang minimal di Apps / Test_Android / Src / file dan kodenya akan ditunjukkan pada bagian di bawah ini :
Test_Android.cpp: #include "Linderdaum.h" sEnvironment* Env = NULL; LMatrix4 Projection; clVirtualTrackball Trackball; clGameCamera* Camera = NULL; clScene* Scene = NULL; void DrawOverlay(LEvent Event, const LEventArgs& Args) { // refresh camera LMatrix4 Trans( Trackball.GetRotationMatrix() * Camera->GetCamera().GetModelViewMatrix() ); Scene->SetCameraTransform( Trans ); Scene->SetCameraProjection( Projection ); // draw the scene Scene->SetUseOffscreenBuffer( false, false ); Scene->RenderForward(); // update the virtual trackball bool MousePressedL = Env->Console->IsKeyPressed( LK_LBUTTON ); Env->Viewport->UpdateTrackball( &Trackball, 10.0f, MousePressedL ); } void Update( LEvent Event, const LEventArgs& Args ) { // in Args.FFloatArg хранится DeltaTime in milliseconds } APPLICATION_ENTRY_POINT { LString CommandLine; EXTRACT_COMMAND_LINE(CommandLine); Env = new sEnvironment(); // CommonMedia used only on the PC, on Android, it is cleverly packaged in resources Env->DeployDefaultEnvironment( CommandLine, "..\..\CommonMedia" ); Env->FileSystem->Mount("GameData"); Projection = Math::Perspective( 45.0f, Env->Viewport->GetAspectRatio(), 0.4f, 2000.0f ); // create a camera and assign it to events Camera = Env->Linker->Instantiate( "clGameCamera" ); Camera->GetCamera().SetPosition( LVector3(0,-10,10) ); CONNECTOBJ( L_EVENT_TIMER, &clGameCamera::Event_TIMER, Camera ); Env->Connect( L_EVENT_DRAWOVERLAY, Utils::Bind( &DrawOverlay ) ); Env->Connect( L_EVENT_TIMER, Utils::Bind( &Update ) ); // create a scene Scene = Env->Linker->Instantiate("clScene"); // and add it to the mesh int ID = Scene->AddGeom( Env->Resources->CreateIcosahedron( 3.0f, LVector3(0) ) ); // set up the material clMaterial* Mtl = Env->Resources->CreateMaterial(); Mtl->SetPropertyValue( "DiffuseColor", "1.0 0.0 0.0 0" ); Mtl->SetPropertyValue( "CastShadow", "false" ); Scene->SetMtl( ID, Mtl ); // set the position Scene->SetLocalTransform( ID, LMatrix4::GetTranslateMatrix( LVector3( 0.0f, 0.0f, 0.0f ) ) ); Env->RunApplication( DEFAULT_CONSOLE_AUTOEXEC ); APPLICATION_EXIT_POINT( Env ); } APPLICATION_SHUTDOWN { }
Kode ini akan menampilkan icosahedron merah di tengah layar yang dapat diputar dengan mouse. Kita juga ingin membangun aplikasi tanpa harus membuat perubahan pada perangkat Android atau PC Windows.
Membangun Engine untuk Android
Bisa dibilang membangun aplikasi untuk Android itu mudah, namun kamu harus mengatur beberapa tool yang dibutuhkan terlebih dahulu:
- Variabel lingkungan JAVA_HOME harus mengacu ke folder dengan JDK (Pada Ubuntu, biasanya folder JDK di /usr/lib/kvm/default-java)
- Variabel lingkungan NDK_ROOT harus mengacu ke folder dengan Android NDK
- Berkas Apps / Test_Android / local.properties perlu menentukan parameter ‘sdk.dir =’ menunjuk ke folder dengan Android SDK
Selanjutnya, kita perlu membangun engine untuk Android (disertai SDK dan yang sedang digunakan libLinderdaumEngineCore.a sehingga kamu dapat membangun kembali secara manual apabila kamu ingin mengetahui lebih mendalam tentang engine yang dimiliki kamu ).
Jalankan Cygwin Bash Shell, menuju direktori, dan ketik BuildAndroid ndk-build -j4. Hasilnya, kamu akan melihat libLinderdaumEngineCore.a lebih besar dari 100 MB.
Membangun Proyek untuk Android
Membangun sebuah proyek Android memerlukan perubahan pada beberapa file di Apps/Test_Android. Berikut ini merupakan perubahan yang perlu kamu buat:
ant.properties android.library.reference.1=..\\\\..\\\\BuildAndroid project.properties target=android-21 local.properties sdk.dir=<path to Android SDK, for example C:\\android-sdk> res\values\strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Test_Android</string> </resources> jni\Application.mk APP_OPTIM := release APP_PLATFORM := android-21 APP_STL := gnustl_static APP_CPPFLAGS += -frtti APP_CPPFLAGS += -fexceptions APP_CPPFLAGS += -DANDROID APP_ABI := x86
Untuk menggunakan tool dari Android SDK, kamu membutuhkan manifesto AndroidManifest.xml. Contohnya dapat anda lihat sebagai berikut:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.linderdaum.engine.myfirstandroidapp" android:versionCode="1" android:versionName="0.6.00" android:installLocation="auto"> <!--require Android 2.1 and higher--> <uses-sdk android:minSdkVersion="7" /> <uses-sdk android:targetSdkVersion="9" /> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true" /> <uses-feature android:glEsVersion="0x00020000"/> <uses-feature android:name="android.hardware.telephony" android:required="false" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:label="@string/app_name" android:installLocation="preferExternal" android:debuggable="false"> <activity android:name="com.linderdaum.engine.LinderdaumEngineActivity" android:launchMode="singleTask" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Dalam aplikasi yang berbeda, kamu mungkin perlu mengubah paket=«com.linderdaum.engine.myfirstandroidapp». Pergi ke Apps\Test_Android dan jalankan ndk-build pada Cygwin. Kamu dapat mengikuti langkah berikut :
$ ndk-build Compile++ thumb : LinderdaumEngine <= LAndroid.cpp Compile thumb : LinderdaumEngine <= LJNI.c Compile++ thumb : LinderdaumEngine <= Test_Android.cpp Prebuilt : libLinderdaumEngineCore.a <= jni/../../../BuildAndroid/obj/local/x86/ Prebuilt : libFreeImage.a <= jni/../../../BuildAndroid/jni/x86/ Prebuilt : libFreeType.a <= jni/../../../BuildAndroid/jni/x86/ Prebuilt : libVorbis.a <= jni/../../../BuildAndroid/jni/x86/ Prebuilt : libOGG.a <= jni/../../../BuildAndroid/jni/x86/ Prebuilt : libOpenAL.a <= jni/../../../BuildAndroid/jni/x86/ Prebuilt : libModPlug.a <= jni/../../../BuildAndroid/jni/x86/ Prebuilt : libstdc++.a <= /sources/cxx-stl/gnu-libstdc++/libs/x86/ SharedLibrary : libLinderdaumEngine.so Install : libLinderdaumEngine.so => libs/armeabi-v7a/libLinderdaumEngine.so
Ini merupakan bagian akhir dari bahasa pemrograman C++ dalam proyek ini. Kamu tetap perlu untuk menambahkan Java dan membangun distribusi di .apk. Untuk itu, kamu perlu membuat kode build.xml:
<?xml version="1.0" encoding="UTF-8"?> <project name="Asteroids" default="help"> <import file="../../BuildAndroid/CommonMedia.xml"/> <property file="local.properties" /> <property file="ant.properties" /> <loadproperties srcFile="project.properties" /> <fail message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var" unless="sdk.dir" /> <target name="copy-game-data"> <!-- Game data --> <delete dir="assets"/> <copy todir="assets/Data"> <fileset dir="GameData"> </fileset> </copy> <copy todir="assets/Data"> <fileset dir="Data"> </fileset> </copy> </target> <import file="${sdk.dir}/tools/ant/build.xml" /> </project>
Jalankan ant copy-common-media debug dan bersiap-siap untuk distribusi di Apps\Test_Android\bin\Test_Android-debug.apk. Nantinya berkas APK ini bisa diinstal pada perangkat dengan menggunakan perintah :
adb install Test_Android-debug.apk
Jalankan aplikasi. Selanjutnya, kamu dapat melihat hasilnya seperti di bawah ini:
Artikel Terkait
- Official site and documentation of Cocos2d-x
- Development and Optimization for NDK-based Android Game Application on Platforms based on Intel Architecture
- Game Engines for Android
- Developing under Android and using Linderdaum Engine
* Artikel ini adalah hasil kerja sama dengan Intel Developer Zone. Artikel asli bisa dilihat di link ini.