BAB V IMPLEMENTASI DAN PENGUJIAN
Pada Bab V ini, akan dijelaskan implementasi dan pengujian yang dilakukan atas hasil analisis dan perancangan yang telah dijelaskan di Bab III dan Bab IV. Sub-bab 5.1 akan berisi penjelasan mengenai implementasi XGate2D, sedangkan Sub-bab 5.2 akan berisi penjelasan mengenai pengujian yang dilakukan terhadap hasil implementasi XGate2D.
5.1 Implementasi 5.1.1 Lingkungan Implementasi Lingkungan implementasi XGate2D adalah sebagai berikut: 1. Sistem Operasi: Microsoft Windows Vista Service Pack 1 2. Perangkat Lunak Utama: a. Microsoft Visual Studio Team System 2008 b. Microsoft XNA Game Studio 3.0 3. Perangkat Keras Utama a. Processor Intel Core 2 Duo T7100 @ 1.80 GHz b. Memory 2 GB 5.1.2 Batasan Implementasi Batasan implementasi XGate2D adalah sebagai berikut: 1. Fitur physics yang diimplementasikan hanya fitur gerak jatuh bebas berdasarkan kecepatan awal dan gravitasi. 2. Fitur XGate2D yang sudah diimplementasikan hanya fitur-fitur yang dianggap penting untuk pembuatan game 2D, yaitu fitur-fitur yang sudah dijelaskan pada Bab IV dan Bab V.
V-1
V-2
5.1.3 Implementasi Modul Modul-modul
yang
telah
dirancang
pada
bab
sebelumnya
masing-masing
diimplementasikan dalam bentuk Dynamic-link Library (DLL), yaitu file berekstensi .dll yang merupakan implementasi shared library di Microsoft Windows. Daftar modul yang diimplementasikan beserta nama file .dll implementasinya dapat dilihat pada Tabel V-1. Tabel V-1 Implementasi Modul pada XGate2D No. 1. 2. 3. 4.
Nama Modul XGate2DCore XGate2DGraphic XGate2DPhysic XGate2DUserInterface
Nama File DLL XGate2DCore.dll XGate2DGraphic.dll XGate2DPhysic.dll XGate2DUserInterface.dll
5.1.4 Implementasi Kelas, Interface, dan Enumerasi Kelas, interface, dan enumerasi yang telah dirancang pada bab sebelumnya masingmasing diimplementasikan dalam bentuk file kode program C# berekstensi .cs. Pada bagian-bagian berikutnya akan diberikan daftar implementasi kelas, interface, dan enumerasi per modul beserta dengan namespace masing-masing kelas. 5.1.4.1
XGate2DCore
Daftar implementasi kelas, interface, dan enumerasi beserta dengan namespace-nya untuk modul XGate2DCore dapat dilihat pada Tabel V-2. Tabel V-2 Implementasi Kelas pada Modul XGate2DCore Nama Kelas XGate2DSystem XGate2DRenderer IGame XGate2DInput XGate2DInputManager XGate2DFont XGate2DFontManager XGate2DControlObject XGate2DControlManager XGate2DAudioManager IProfilerObject XGate2DProfiler XGate2DFPSCounter
Namespace XGate2D.Engine.Core.Base XGate2D.Engine.Core.Base XGate2D.Engine.Core.Interface XGate2D.Engine.Core.Input XGate2D.Engine.Core.Input XGate2D.Engine.Core.Font XGate2D.Engine.Core.Font XGate2D.Engine.Core.Control XGate2D.Engine.Core.Control XGate2D.Engine.Core.Audio XGate2D.Engine.Core.Debug XGate2D.Engine.Core.Debug XGate2D.Engine.Core.Debug
Nama File .cs XGate2DSystem.cs XGate2DRenderer.cs IGame.cs XGate2DInput.cs XGate2DInputManager.cs XGate2DFont.cs XGate2DFontManager.cs XGate2DControlObject.cs XGate2DControlManager.cs XGate2DAudioManager.cs IProfilerObject.cs XGate2DProfiler.cs XGate2DFPSCounter.cs
V-3
5.1.4.2
XGate2DGraphic
Daftar implementasi kelas, interface, dan enumerasi beserta dengan namespace-nya untuk modul XGate2DGraphic dapat dilihat pada Tabel V-3. Tabel V-3 Implementasi Kelas pada Modul XGate2DGraphic Nama Kelas XGate2DDrawable XGate2DSprite EAnimationLoop EAnimationState XGate2DAnimationInfo XGate2DAnimatedSprite XGate2DParticle XGate2DParticleSystem XGate2DTiles XGate2DSceneManager XGate2DWorld XGate2DCamera
5.1.4.3
Namespace XGate2D.Engine.Graphic.Base XGate2D.Engine.Graphic.Sprite XGate2D.Engine.Graphic.Animation.E numeration XGate2D.Engine.Graphic.Animation.E numeration XGate2D.Engine.Graphic.Animation XGate2D.Engine.Graphic.Animation XGate2D.Engine.Graphic.Particle XGate2D.Engine.Graphic.Particle XGate2D.Engine.Graphic.TilingEngine XGate2D.Engine.Graphic.Scene XGate2D.Engine.Graphic.Scene XGate2D.Engine.Graphic.Scene
Nama File .cs XGate2DDrawable.cs XGate2DSprite.cs EAnimationLoop.cs EAnimationState.cs XGate2DAnimationInfo.cs XGate2DAnimatedSprite.cs XGate2DParticle.cs XGate2DParticleSystem.cs XGate2DTiles.cs XGate2DSceneManager.cs XGate2DWorld.cs XGate2DCamera.cs
XGate2DPhysic
Daftar implementasi kelas, interface, dan enumerasi beserta dengan namespace-nya untuk modul XGate2DPhysic dapat dilihat padaTabel V-4. Tabel V-4 Implementasi Kelas pada Modul XGate2DPhysic Nama Kelas ICollidableObject XGate2DRectangleCollidab leObject XGate2DCircleCollidableO bject XGate2DPerPixelCollidable Object XGate2DPhysicObject
5.1.4.4
Namespace XGate2D.Engine.Physic.Collision XGate2D.Engine.Physic.Collision XGate2D.Engine.Physic.Collision XGate2D.Engine.Physic.Collision XGate2D.Engine.Physic
Nama File .cs ICollidableObject.cs XGate2DRectangleCollidableO bject.cs XGate2DCircleCollidableObjec t.cs XGate2DPerPixelCollidableObj ect.cs XGate2DPhysicObject.cs
XGate2DUserInterface
Daftar implementasi kelas, interface, dan enumerasi beserta dengan namespace-nya untuk modul XGate2DUserInterface dapat dilihat pada Tabel V-5. Tabel V-5 Implementasi Kelas pada Modul XGate2DUserInterface Nama Kelas XGate2DLabel XGate2DTextBox EButtonState XGate2DButton XGate2DCheckBox
Namespace XGate2D.Engine.UserInterface XGate2D.Engine.UserInterface XGate2D.Engine.UserInterface XGate2D.Engine.UserInterface XGate2D.Engine.UserInterface
Nama File .cs XGate2DLabel.cs XGate2DTextBox.cs EButtonState.cs XGate2DButton.cs XGate2DCheckBox.cs
V-4
5.2 Pengujian Pengujian dilakukan untuk membuktikan fungsionalitas XGate2D sebagai game engine 2D. Pengujian yang dilakukan ada 2 macam, yaitu pengujian unit dan pengujian sistem. 5.2.1 Pengujian Unit Pengujian unit pada XGate2D adalah pengujian yang dilakukan terhadap setiap modul XGate2D secara independen antara satu modul dengan modul lainnya. 5.2.1.1
Tujuan Pengujian
Tujuan pengujian unit adalah untuk membuktikan fungsionalitas semua modul XGate2D sebagai modul-modul terpisah yang dapat menjalankan fungsinya masingmasing dengan baik dan benar. 5.2.1.2
Skenario Pengujian
Skenario pengujian sistem yang dilakukan adalah membangun driver untuk masingmasing modul yang mengutilisasi fungsi modul tersebut. Berikut akan dijabarkan driver yang dibangun untuk pengujian masing-masing modul: 1. XGate2DCore Untuk pengujian modul XGate2DCore, dibangun sebuah driver bernama XGate2DCoreDemo. Tujuan khusus dari pembangunan driver ini adalah sebagai berikut: a. Membuktikan bahwa game loop yang dibangun XGate2D telah berjalan dengan baik dan benar b. Membuktikan bahwa XGate2D telah dapat menangani input dari input device dengan baik dan benar (fitur XG-F-01 Input Handler) c. Membuktikan bahwa XGate2D telah dapat memainkan data audio pada game dengan baik dan benar (fitur XG-F-08 Audio)
V-5
Berikut
adalah
potongan
kode dari
driver
XGate2DCoreDemo
yang
berhubungan dengan tujuan khusus pembangunan driver tersebut (Kode V-1). public void LoadContent() { //Initializing audio manager XGate2DAudioManager.Initialize("Content/Audio/CoreDemoAudio.xgs", "Content/Audio/Wave Bank.xwb", "Content/Audio/Sound Bank.xsb"); //Print this function name System.Diagnostics.Debug.WriteLine("LoadContent()"); } private void HandleInput(GameTime gameTime) { //Define each action taken for an input data //Keyboard input if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.Enter)) { //Play music XGate2DAudioManager.PlayMusic("msc_story"); } else if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.A)) { //Play sound effects XGate2DAudioManager.PlayCue("sfx_lvlup"); } else if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.Back)) { //Stop music XGate2DAudioManager.StopMusic(); } //Mouse input if (XGate2DInputManager.IsLeftButtonPressed()) { //Play sound effects XGate2DAudioManager.PlayCue("sfx_lvlup"); //Check mouse position System.Diagnostics.Debug.WriteLine("x = " + XGate2DInputManager.GetMousePositionX()); System.Diagnostics.Debug.WriteLine("y = " + XGate2DInputManager.GetMousePositionY()); } if (XGate2DInputManager.PlayersInput[0].IsButtonPressed(Buttons.A)) { XGate2DAudioManager.PlayCue("sfx_lvlup"); } } public void Update(GameTime gameTime) { HandleInput(gameTime); //Calling input handling function System.Diagnostics.Debug.WriteLine("Update(gameTime)"); }
Kode V-1 Pengujian Modul XGate2DCore
V-6
2. XGate2DGraphic Untuk pengujian modul XGate2DGraphic, dibangun sebuah driver bernama XGate2DGraphicDemo. Fitur-fitur yang tercakup pada pengujian unit ini adalah fitur XG-F-02 Animasi, XG-F-06 Particle System, dan XG-F-07 Tiling Engine. Tujuan khusus dari pembangunan driver ini adalah sebagai berikut: a. Membuktikan bahwa semua kelas turunan XGate2DDrawable yang termasuk dalam modul ini dapat berfungsi dengan baik b. Membuktikan bahwa kelas yang merepresentasikan dunia pada XGate2D, scene manager, dan kamera dapat berfungsi dengan baik c. Membuktikan bahwa untuk membuat sistem partikel yang memiliki perilaku tertentu, cukup dengan membuat kelas turunan dari kelas abstrak XGate2DParticleSystem dan meng-assign nilai atribut sistem partikel sesuai dengan perilaku sistem partikel yang diinginkan Berikut adalah potongan kode dari driver XGate2DGraphicDemo yang berhubungan dengan tujuan khusus pembangunan driver tersebut (Kode V-2 dan Kode V-3). public void LoadContent() { Rectangle rect = XGate2DRenderer.FullViewport.TitleSafeArea; //Create world instance world = new XGate2DWorld(rect.Width, rect.Height); world.AddCamera(new XGate2DCamera(Vector2.Zero, 0, 0, world.WorldWidth / 2, world.WorldHeight)); world.AddCamera(new XGate2DCamera(new Vector2(world.WorldWidth / 2 + 1, 0), 0, 0, world.WorldWidth / 2, world.WorldHeight)); //Create sprite instance bg = new XGate2DSprite("bg", Vector2.Zero, 1f); water = new XGate2DSprite("water", new Vector2(100, 100), 0.99f); //Create animated sprite instance tractor = new XGate2DAnimatedSprite("tractor", new Vector2(400, 300), 0.99f); tractor.AddAnimation(new XGate2DAnimationInfo(18, 0, 17, new Rectangle(0, 0, 189, 124), 9, EAnimationLoop.Looping)); tractor.PlayAnimation(0); stars = new Stars(3, 0.99f); //Create tiles sprite instance grass = new XGate2DTiles(XGate2DSystem.Singleton.Content.Load
("grass"), new Vector2(50, 200), 0, Vector2.One, Vector2.Zero, 0.98f, 2, 2); world.SceneManager.AddChildObject(bg); world.SceneManager.AddChildObject(water); world.SceneManager.AddChildObject(tractor); world.SceneManager.AddChildObject(stars); world.SceneManager.AddChildObject(grass); }
Kode V-2 Pengujian Modul XGate2DGraphic (1)
V-7
private void HandleInput(GameTime gameTime) { elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds; //Apply transformation on each drawable object if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.Right)) { water.Rotate(100 * elapsed); } else if (XGate2DInputManager.IsKeyPressed(Keys.Up)) { water.FlipVertically(); } else if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.Down)) { water.Scale.X += 1 * elapsed; water.Scale.Y += 1 * elapsed; } else if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.Left)) { water.Translate(-100 * elapsed, 0); grass.Translate(-100 * elapsed, 0); } if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.C)) { world.Cameras[0].CamRect.X += (int)(100 * elapsed); } else if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.Z)) { world.Cameras[0].CamRect.X -= (int)(100 * elapsed); } if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.N)) { world.Cameras[1].CamRect.X += (int)(100 * elapsed); } else if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.V)) { world.Cameras[1].CamRect.X -= (int)(100 * elapsed); } } public void Update(GameTime gameTime) { HandleInput(gameTime); starstime -= elapsed; if (starstime < 0) { stars.AddParticles(new Vector2(XGate2DRenderer.FullViewport.Width * 3 / 4, 300)); starstime = TIME_BETWEEN_NEW_STARS_PARTICLE; } world.Update(gameTime); } public void Draw(GameTime gameTime) { //Draw the world world.Draw(gameTime); }
Kode V-3 Pengujian Modul XGate2DGraphic (2)
3. XGate2DPhysic Untuk pengujian modul XGate2DPhysic, dibangun sebuah driver bernama XGate2DPhysicDemo. Tujuan khusus dari pembangunan driver ini adalah sebagai berikut:
V-8
a. Membuktikan bahwa semua tipe collision detection yang diimplementasikan dapat berfungsi dengan baik dan benar (fitur XG-F-04 Collision Detection) b. Membuktikan bahwa sifat fisika yang diimplementasikan dapat berfungsi dengan baik dan benar (fitur XG-F-05 Physics) Berikut adalah potongan kode dari driver XGate2DPhysicDemo yang berhubungan dengan tujuan khusus pembangunan driver tersebut (Kode V-4). public void CheckRing() { //Use collidable object to detect collision if(ParentGame.Rings[i].CollisionObject.IsCollide(Sprite.WorldPosition.X + BottomMassPoint.X, Sprite.WorldPosition.Y + BottomMassPoint.Y)) { //... } } private void handleInput(GameTime gameTime) { #region circle input if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.D)) { circle2CollidableObject.Center.X += 100 * elapsed; if (circle2CollidableObject.IsCollide(circle1CollidableObject)){ circle2CollidableObject.Center.X -= 100 * elapsed;} else{ circle2.WorldPosition.X += 100 * elapsed;}} //... #endregion #region rectangle input if (XGate2DInputManager.IsKeyPressedOrHolded(Keys.L)){ rect2CollidableObject.WorldPosition.X += 100 * elapsed; if (rect2CollidableObject.IsCollide(rect1CollidableObject)){ rect2CollidableObject.WorldPosition.X -= 100 * elapsed;} else{ rect2.WorldPosition.X += 100 * elapsed;}} #endregion } public void Update(GameTime gameTime) //Invoke method that models free fall movement { PhysicObject.FreeFall(ParentGame.GRAVITY, elapsed); moveTemp = PhysicObject.Velocity * elapsed; //... if (Sprite.WorldPosition.X >= 0f) { if (IsCollide(Sprite.WorldPosition.X + BottomMassPoint.X, Sprite.WorldPosition.Y + BottomMassPoint.Y)) { //... if (elevationTemp > MAX_ELEVATION) { //Stop movemen PhysicObject.StopHorizontalMovement(); } } } else { //... PhysicObject.StopHorizontalMovement(); } }
Kode V-4 Pengujian Modul XGate2DPhysic
V-9
4. XGate2DUserInterface Untuk pengujian modul XGate2DUserInterface, dibangun sebuah driver bernama XGate2DUserInterfaceDemo. Tujuan khusus dari pembangunan driver ini adalah sebagai berikut: a. Membuktikan bahwa semua elemen XGate2DUserInterface dapat berfungsi dengan baik (fitur XG-F-03 GUI) b. Membuktikan bahwa elemen XGate2DUserInterface yang dapat menerima kontrol / fokus user dapat berfungsi dengan baik Berikut adalah potongan kode dari driver XGate2DUserInterfaceDemo yang berhubungan dengan tujuan khusus pembangunan driver tersebut (Kode V-5). public void LoadContent() { //Create all UI element instance label = new XGate2DLabel("Ini label", "Arial", new Vector2(100, 100), 80, 20, Color.Black, Color.White, 0f); textbox = new XGate2DTextBox("Ini text box", "Arial", new Vector2(200, 300), 100, 20, Color.Black, Color.White, 0f); button = new XGate2DButton(new Vector2(100, 500), 115, 32, new XGate2DSprite("button_up", Vector2.Zero, 0f), new XGate2DSprite("button_over", Vector2.Zero, 0f), new XGate2DSprite("button_down", Vector2.Zero, 0f), new XGate2DSprite("button_down", Vector2.Zero, 0f), buttonOnIdle, buttonOnHover, buttonOnClick, buttonOnDisable, 0f); checkBox = new XGate2DCheckBox(new Vector2(300, 200), 64, 64, new XGate2DSprite("check_checked_idle", Vector2.Zero, 0f), new XGate2DSprite("check_checked_over", Vector2.Zero, 0f), new XGate2DSprite("check_checked_over", Vector2.Zero, 0f), new XGate2DSprite("check_checked_over", Vector2.Zero, 0f), new XGate2DSprite("check_unchecked_idle", Vector2.Zero, 0f), new XGate2DSprite("check_unchecked_over", Vector2.Zero, 0f), new XGate2DSprite("check_unchecked_over", Vector2.Zero, 0f), new XGate2DSprite("check_unchecked_over", Vector2.Zero, 0f), checkOnIdle, checkOnHover, checkOnClick, checkOnDisable, false, 0f); } void buttonOnClick() { //Implement event handler for button event clickCounter++; System.Diagnostics.Debug.WriteLine("button on click = " + clickCounter); } void checkOnClick() //Implement event handler for check box event { if (checkBox.IsChecked) System.Diagnostics.Debug.WriteLine("checked"); else System.Diagnostics.Debug.WriteLine("unchecked"); }
Kode V-5 Pengujian Modul XGate2DUserInterface
5.2.1.3
Hasil Pengujian
Berikut adalah hasil pengujian dari setiap modul XGate2D, ditinjau dari tujuan khusus pengujian untuk masing-masing modul: 1. XGate2DCore Hasil pengujian untuk modul XGate2DCore dapat dilihat pada Tabel V-6. .
V-10
Tabel V-6 Hasil Pengujian Modul XGate2DCore No. 1.
Tujuan Game loop
2.
Input
3.
Audio
Skenario - Membuat kelas turunan IGame - Menuliskan nama fungsi ke window output IDE setiap suatu fungsi pada IGame dipanggil - Menangani input dari keyboard, mouse, dan game pad - Mengasosiasikan suatu aksi dengan data input tertentu
- Memainkan musik ketika suatu aksi input dilakukan
Hasil - Semua nama fungsi IGame dituliskan ke layar sesuai dengan siklus game - Musik dimainkan ketika tombol Enter ditekan - Musik dihentikan ketika tombol Backspace ditekan - Data audio dimainkan ketika tombol A pada keyboard, tombol kiri mouse, dan tombol A pada game pad ditekan Idem dengan di atas
2. XGate2DGraphic Hasil pengujian untuk modul XGate2DGraphic dapat dilihat pada Tabel V-7. Tabel V-7 Hasil Pengujian Modul XGate2DGraphic No. 1.
Tujuan Kelas turunan XGate2DDrawable
Skenario - Membuat objek sprite standar, lalu melakukan transformasi sesuai input - Membuat objek sprite yang memiliki animasi, lalu memainkan animasi tersebut - Membuat objek partikel - Membuat objek tiles
2.
Representasi dunia, scene manager, dan kamera
- Membuat suatu dunia dengan 2 kamera
3.
Kelas abstrak sistem partikel
- Membuat sistem partikel dengan perilaku tertentu
Hasil - Sprite berputar ketika tombol Right ditekan - Sprite dapat dibalik secara vertikal ketika tombol Up ditekan - Sprite dapat diperbesar ketika tombol Down ditekan - Sprite dapat digeser ke kiri ketika tombol Left ditekan - Animasi sprite dapat dimainkan dengan baik - Objek tiles berfungsi dengan baik - Kamera 1 dapat digeser ketika tombol C dan Z ditekan, sehingga menyorot bagian dunia yang berbeda dari Kamera 2 - Kamera 2 dapat digeser ketika tombol N dan V ditekan, sehingga menyorot bagian dunia yang berbeda dari Kamera 1 - Sistem partikel dapat ditampilkan sesuai dengan perilaku yang telah ditentukan
3. XGate2DPhysic Hasil pengujian untuk modul XGate2DGraphic dapat dilihat pada Tabel V-7. .
V-11
Tabel V-8 Hasil Pengujian Modul XGate2DPhysic No. 1.
Tujuan Collision Detection
Skenario - Membuat kasus uji untuk semua tipe collision detection yang diimplementasikan
2.
Physics
- Membuat objek yang gerakannya terpengaruh oleh gravitasi lingkungannya
Hasil - 2 objek bujur sangkar dapat bertabrakan sesuai dengan bujur sangkar masing-masing (rectangle collision detection) - 2 objek lingkaran dapat bertabrakan sesuai dengan lingkaran masing-masing (circle collision detection) - Sebuah boneka dapat bertabrakan dengan lingkungannya yang berbentuk tidak beraturan (per pixel collision detection) - Sebuah boneka dapat melompat dan kemudian jatuh lagi akibat adanya gravitasi, sesuai dengan aturan gerak jatuh bebas
4. XGate2DUserInterface Hasil pengujian untuk modul XGate2DUserInterface dapat dilihat pada Tabel V-9. Tabel V-9 Hasil Pengujian Modul XGate2DUserInterface No. 1.
Tujuan Semua elemen GUI
Skenario - Membuat instance semua kelas GUI
2.
Elemen GUI yang dapat menerima kontrol / fokus user
- Membuat instance textbox sebagai objek yang dapat menerima fokus user
5.2.1.4
Hasil - Label dapat ditampilkan dengan baik - Textbox dapat ditampilkan dan menerima input dengan baik - Click counter button bertambah ketika button diklik - Checkbox dapat di-checked atau di-unchecked - Text box mendapat fokus ketika ada mouse click pada areanya, dan kemudian dapat diisi dengan input dari keyboard - Text box kehilangan fokus ketika ada mouse click di luar areanya
Kesimpulan Pengujian
Dari hasil pengujian unit untuk masing-masing modul, dapat ditarik kesimpulan bahwa semua fungsionalitas modul XGate2D telah diimplementasikan dengan baik sesuai dengan spesifikasi fiturnya.
V-12
5.2.2 Pengujian Sistem Pengujian sistem pada XGate2D adalah pengujian yang dilakukan terhadap seluruh modul XGate2D yang telah diintegrasi menjadi sebuah game engine yang siap pakai untuk membuat game 2D. 5.2.2.1
Tujuan Pengujian
Tujuan pengujian sistem adalah untuk membuktikan fungsionalitas XGate2D sebagai sebuah game engine dengan melakukan pengujian terhadap XGate2D sebagai integrasi dari semua modulnya. 5.2.2.2
Skenario Pengujian
Skenario pengujian sistem yang dilakukan adalah membangun sebuah prototype game dengan menggunakan XGate2D yang mengutilisasi semua fitur yang disediakan XGate2D. Prototype game yang dibuat untuk keperluan pengujian sistem ini bernama Ring Catcher. Game ini merupakan game platformer (lihat 2.1.4), yang mengharuskan si pemain untuk mengumpulkan cincin sejumlah yang ditentukan untuk memenangi permainan. Screen shot prototype game ini dapat dilihat pada Gambar V-1.
V-13
Gambar V-1 Prototype Game Ring Catcher
Game ini mengutilisasi semua fitur XGate2D yang telah diimplementasikan. Pemetaan fitur XGate2D dengan implementasi pemakaiannya pada RingCatcher dapat dilihat pada Tabel V-10. Tabel V-10 Pemetaan Fitur XGate2D dengan Implementasinya pada Ring Catcher No. 1. 2. 3.
Input Handler Animasi GUI
Nama Fitur
4.
Collision Detection
5. 6. 7. 8.
Physics Particle System Tiling Engine Audio
5.2.2.3
Implementasi pada Ring Catcher Input pada game Animasi karakter dan cincin GUI pada awal game, level game, dan pause game Collision antara karakter dengan lingkungannya dan dengan cincin Gerak lompat dan jatuh karakter Asap pada level game Awan dan rumput pada level game Musik dan sound effect pada game
Hasil Pengujian
Hasil pengujian sistem XGate2D dapat dilihat pada Tabel V-11. .
V-14
Tabel V-11 Hasil Pengujian Sistem XGate2D No. 1.
Nama Fitur Input Handler
2.
Animasi
3.
GUI
4. 5. 6.
Collision Detection Physics Particle System
7.
Tiling Engine
8.
Audio
5.2.2.4
Hasil Pengujian - Kotak input dan menu pause dapat menerima input dari mouse dan keyboard - Karakter Ring Catcher dapat bergerak dengan baik berdasarkan input dari keyboard dan game pad - Karakter mempunyai animasi ketika idle, berjalan, dan lompat - Cincin dapat bergerak - GUI pada awal game, level game, dan pause game dapat ditampilkan dan berinteraksi dengan user dengan baik - Karakter dapat bertabrakan dengan cincin dan lingkungannya - Karakter dapat memiliki sifat fisika, yaitu gerak jatuh bebas - Asap pada lingkungan dapat ditampilkan dengan baik dan memiliki perilaku seperti yang diharapkan (seperti asap) - Awan dan rumput dapat ditampilkan dengan baik dengan hanya menggunakan sebuah sprite yang sama - Semua musik dan sound effect dapat dimainkan dengan baik sesuai dengan kondisi yang diasosiasikan dengannya
Kesimpulan Pengujian
Dari hasil pengujian sistem di atas, dapat ditarik kesimpulan bahwa fungsionalitas XGate2D sebagai sebuah game engine dapat digunakan dan dapat diintegrasikan dalam bentuk sebuah prototype game dengan baik dan benar.