Jumat, 15 April 2011

membuat aplikasi plane space dengan J2ME









Membuat Game Sederhana dengan J2ME

Dalam pembuatan game ini digunakan aplikasi Wireless Toolkit 2.5.1, jadi pastikan aplikasi tersebut telah terintegrasi dalam komputer yang akan digunakan.

Sebelum berlanjut ke dalam pembuatan game ada beberapa hal yang harus disiapkan, yang pertama adalah background yang dibuat 2 kali dari tinggi layar yang berfungsi sebagai langit yang disimpan dengan nama daratan.gif


Selanjutnya hal kedua yang harus dipersiapkan adalah file music yang berupa format wav (digunakan untuk suara pada saat pesawat meledak dan music pada background) yang terdiri dari explode.wav dan background.wav

Setelah semua yang harus disiapkan selesai, maka untuk langkah-langkah pembuatannya, adalah sebagai berikut :
Langkah pertama yang akan dilakukan adalah membuat sebuah MIDlet untuk menampilkan berbagai tipe choice dan implementasinya pada List. langkah yang di lakukan pertama kali yaitu :

  • membuka aplikasi Wireless Toolkit 2.5.1 pada komputer
  • setelah masuk ke dalam aplikasi Wireless Toolkit 2.5.1, lalu klik pada menu new project seperti pada gambar berikut :


  • Setelah itu isi pada "Project name" dan "MIDlet name" dengan nama PlaneSpace:


  • Selanjutnya pada "API Selection", pilih JTWI pada Target Platform, setelah itu OK:
  • Kita telah selesai dalam pembuatan project baru, selanjutnya silahkan buka notepad atau notepad++ atau text editor lain yang mendukung Java, kita akan membuat kelas Plane Space.java dan kelas Play.java, source code dari masing-masing kelas adalah sebagai berikut :

Class PlaneSpace.java:


Class Play.java

  • Selanjutnya, setelah source code tersebut di tuliskan di notepad tadi, selanjutanya kedua class yang di buat tadi di simpan pada folder : C:\WTK2.5.1\apps\PlaneSpace\src.
  • Lalu kembali pada aplikasi Wireless Toolkit 2.5.1, dan pilh Run.....maka program game tersebut telah dapat kawan-kawan jalankan...


Hasil dari game yang telah dibuat


Mainkan permainan dengan tombol up, down, right, left untuk menghindari pesawat dari bom, apabila pesawat berhasil menghindari bom maka gauge akan bertambah dan apabila pesawat terkena bom maka akan Game Over

Dibuat oleh Poenyariki pada hari Kamis, April 29, 2010 3 komentar http://img1.blogblog.com/img/icon18_email.gifhttp://img2.blogblog.com/img/icon18_edit_allbkg.gif

Kirimkan Ini lewat Email BlogThis! Berbagi ke Twitter Berbagi ke Facebook Berbagi ke Google Buzz

Label: Pemrograman Multimedia

Reaksi:


Membuat Hello World dengan J2ME

J2ME sendiri adalah teknologi dari Java programming language yang di khususkan untuk perangkat mobile seperti Handphone, Pocket PC dan perangkat mobile lainnya. J2ME sebenarnya sama dengan pemrograman menggunakan java sendiri, hanya saja dalam J2ME ada beberapa fungsionalitas yang ditambah dan dikurangi dan di sesuaikan untuk pemrograman perangkat mobile.

Tentunya untuk bisa membuat game di HP kita harus sudah biasa dulu menggunakan pemrograman dengan java, disini saya tidak akan mengulas bahasa pemrograman java tapi disini saya hanya akan memberikan pengetahuan mengenai alat yang digunakan dalam membuat program java di HP dan konsepnya.

Aplikasi yang digunakan dalam pembuatan program sederhana Hello World ini adalah IDE(Integrated Development Environment) NetBeans versi 6, pilih NetBeans yang sudah termasuk Mobility Pack. Agar kita bisa langusng menulis kode program tanpa harus menginstal macam-macam lagi.

Setelah anda menginstall IDE NetBeans, segera jalankan NetBeans nya. Untuk membuat projek baru pilih File-New Project. Nanti akan muncul seperti gambar di bawah.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx5OJRbjNMtsgwul1BhhTYgk2qrZw8yKdAnawWSnBmr8kijocc6fCgWDxgV622fTIGavf-uBOQtUkP0lpGTtEKp2IRUbsiYwYabv29dFZne9hM8N87o7_rXd6PZEoShXn3uODz-E-xF5U/s400/hello1.bmp

Pilih MIDP Application dan tekan Next. Selanjutnya anda akan di bawa ke layer Name and Location seperti di bawah ini.


Input Project Name yang sesuai dengan nama project anda dan hilangkan centang di Create Hello Midlet. Tekan Next


Ini adalah layar untuk menentukan target perangkat yang akan anda buat aplikasinya. Pada baris Emulator Platform adalah pilihan emulator yang anda Install di computer anda, untuk saat ini anda hanya menginstall emulator bawaan dari NetBeans anda. Setelah anda merasa perlu menginstall emulator platform untuk spesifik dari vendor lain seperti Nokia, Sony Ericsson dan Motorola anda dapat mengubahnya disini.

Device adalah perangkat emulator atau HP yang nantinya akan anda jalankan di computer anda, dalam menjalankan program yang akan anda buat. Apabila nantinya anda menginstal emulator platform dari vendor lain anda akan bisa menggunakan HP spesifik dari vendor tersebut.

Device Configuration dan Profile adalah spesifik kemampuan dari paket perangkat yang akan anda jadikan target aplikasi anda, sebagai contoh saya punya HP K608 itu mempunyai spesifikasi CLDC 1.1 dan MIDP 2.0 artinya HP saya bisa menjalankan program dengan paket yang ada di CLDC 1.1 dan MIDP 2.0. Untuk lebih lanjut mengenai perangkat yang anda jadikat target riset lah dahulu dengan melihat spesifikasi HP atau perangkat target anda.

Untuk mempermudah anda mengerti, cukup bayangkan HP lama adalah MIDP 1.0 seperti nokia 6015 dan nokia yang gede dengan slidenya yang saya lupa apa mereknya dan HP lama lainnya. MIDP 2.0 HP baru seperti nokia N70, N73, SE K600, SEW800 dan lain lain. Karena MIDP 2.0 lebih banyak ada baiknya anda pilih MIDP 2.0 dan CLDC 1.1 untuk aplikasi kita kali ini.

Pilih Next dan langsung pilih Finish.

Sebenarnya dalam NetBeans ini anda dapat membuat aplikasi HP dengan Visual MIDlet yang ada dalam NetBeans ini, tetapi untuk lebih memahami secara mendalam konsep pembuatan aplikasi dalam J2ME disini saya tidak akan memakai Visual MIDlet.

Konsep program J2ME adalah sebagai berikut. Dalam J2ME kita harus akan membuat main class turunan dari class MIDlet, main class turunan dari MIDlet tersebut yag nantinya akan dipanggil pertama kali saat applikasi kita berjalan di HP, dalam main class tersebut juga ada 3 method yang nantinya berfungsi sebagai trigger even dari HP kita. Seperti:

starApp(), method yang dipanggil apabila aplikasi kita pertama kali jalan.
pauseApp(), method yang dipanggil apabila pengguna hp mempause aplikasi kita.
destroyApp(), method yang dipanggil apabila pengguna hp menutup aplikasi kita.

Kita mulai dengan membuat classMIDlet baru untuk project anda. Klik kanan para project anda di project explore dan pilih new-MIDlet, namakan class baru itu dengan nama MIDletPertama. Kode terakhir file MIDlet anda terlihat seperti di bawah ini.


Untuk pertama kali kita akan menampilkan “Hello J2ME World” pada layar HP. Ada dua jenis tampilan dalam MIDlet,

Low Level menggunakan class Canvas

High Level menggunakan Form

Disini kita akan menggunakan form untuk mempermudah anda mengerti pembentukan tampilan di MIDlet.


Perhatikan kode di atas, frPertama adalah object Form yang akan kita tampilkan di layer, kita memberi judulForm tersebut dengan “Judul”. Lalu method append adalah method untuk menambahkan Item pada Form, Item yang ingin saya tambahkan adalah String “Hello J2ME World”. Statement Display adalah statement untuk menampilkan object frPertama kedalam layer.

Pilih F11 untuk build project dan F6 untuk run project.

Pilih midlet yang ingin dijalankan dan tekan launch di emulator, selanjutnya emulator anda akan menampilkan Form yang anda buat, seperti di bawah.


Selamat, program anda sudah berjalan baik di emulator, bagaimana caranya menjalankan di HP sesungguhnya?

Masuk kedalam folder project NetBeans anda, buka folder dist


Transfer file jar program anda ke HP anda melaluli Bluetooth, infra merah atau kabel data

Dibuat oleh Poenyariki pada hari Kamis, April 29, 2010 2 komentar http://img1.blogblog.com/img/icon18_email.gifhttp://img2.blogblog.com/img/icon18_edit_allbkg.gif

Kirimkan Ini lewat Email BlogThis! Berbagi ke Twitter Berbagi ke Facebook Berbagi ke Google Buzz

Label: Pemrograman Multimedia

Reaksi:


Minggu, 21 Maret 2010

Contoh penggunaan OpenGL pada C

//Memanggil library yang akan digunakan
#include
#include
#include
#include
//Inisialisasi ukuran dari window
GLsizei winWidth=400, winHeight=400;
//Pengesetan terhadap range dari koordinat
GLfloat xwcMin=0.0,xwcMax=50.0;
GLfloat ywcMin=0.0,ywcMax=50.0;
class wcPt2D {
public: GLfloat x,y;
};
//Deklarasi variabel yang digunakan
typedef GLfloat Matrix3x3 [3][3];
Matrix3x3 matComposite;
const GLdouble pi=3.14159;
//Pengesetan warna background window menjadi hijau
void init(void) {
glClearColor(0.0,1.0,0.0,0.0);
}
//Construksi matriks identitas 3x3
void matrix3x3SetIdentity (Matrix3x3 matIdent3x3){
GLint row, col;
for(row=0;row<3;row++)
for(col=0;col<3;col++)
matIdent3x3[row][col]=(row==col);
}
//Melakukan perkalian terhadap matriks m1 dan m2 lalu hasilnya ditampung di m2
void matrix3x3PreMultiply (Matrix3x3 m1, Matrix3x3 m2){
GLint row, col;
Matrix3x3 matTemp;

for(row=0;row<3;row++)
for(col=0;col<3;col++)
matTemp[row][col]=m1[row][0]*m2[0][col]+m1[row][1]*m2[1][col]+m1[row][2]*m2[2][col];

for(row=0;row<3;row++)
for(col=0;col<3;col++)
m2[row][col]=matTemp[row][col];
}

//Fungsi untuk melakukan rotasi sebesar theta(sudut) yang diinputkan
void rotate2D(wcPt2D pivotPt, GLfloat theta){
Matrix3x3 matRot;
matrix3x3SetIdentity(matRot);
matRot[0][0]=cos(theta);
matRot[0][1]=-sin(theta);
matRot[0][2]=pivotPt.x * (1-cos(theta))+pivotPt.y * sin(theta);
matRot[1][0]=sin(theta);
matRot[1][1]=cos(theta);
matRot[1][2]=pivotPt.y * (1-cos(theta))-pivotPt.x * sin(theta);
matrix3x3PreMultiply(matRot,matComposite);
}
//Menggunakan matriks kompososit, dan melakukan transformasi koordinat
void transformVerts2D(GLint nVerts, wcPt2D * verts){
GLint k;
GLfloat temp;
for(k=0;kHasil Output :

Dibuat oleh Poenyariki pada hari Minggu, Maret 21, 2010 0 komentar http://img1.blogblog.com/img/icon18_email.gifhttp://img2.blogblog.com/img/icon18_edit_allbkg.gif

Kirimkan Ini lewat Email BlogThis! Berbagi ke Twitter Berbagi ke Facebook Berbagi ke Google Buzz

Label: Pemrograman Multimedia

Reaksi:


OpenGL dan Visual C++

OpenGL adalah suatu graphics library yang sebagian bersifat open source, dapat dipakai pada banyak platform (Windows ataupun Linux) dan dapat digunakan pada berbagai jenis compiler bahasa pemrograman seperti C++, Delphi ataupun VB. Jadi dengan kata lain OpenGL adalah sebuah library tambahan yang dapat ditambahkan dalam berbagai platform dan bahasa pemrograman yang berbasis graphics.
Dalam membuat sebuah graphics dalam Visual C++ tidak dapat naksimal karena kurang mendukungnya library-library yang dimiliki Visual C++ untuk membuat sebuah graphics, maka dibutuhkan suatu library graphics seperti OpenGL. Selain alasan ditas penggunaan OpenGL pada Visual C++ adalah untuk memudahkan dan agar lebih efisien dalam pembuatan sebuah graphics.
Oleh karena itu dsini saya akan mencoba memberikan cara – cara menambahkan atau mengkonfigurasi OpenGL pada Visual C++. Dalam hal ini Visual C++ yang digunakan adalah Visual C++ 6.0.
Langkah pertama yang harus dilakukan adalah memastikan apakah Visual C++ 6.0 sudah terinstal pada computer anda. Jika sudah anda pastikan bahwa Visual C++ 6.0 telah terintegrasi di computer anda, maka anda harus mendownload library OpenGL
disini.
Setelah anda selesai mendownload file OpenGL.rar maka langkah selanjutnya adalah meng-ekstract file tersebut dan pastikan terdapat file glut.h, glut32.lib, dan glut32.dll.

Setelah semua file dipastikan telah ada maka tambahkan atau pindahkan file glut32.dll pada directory C:\WINDOWS\system.

Kemudian tambahkan atau pindahkan file glut.h pada directory C:\Program Files\Microsoft Visual Studio\VC98\Include\GL.

Langkah terkahir adalah menambahkan atau memindahkan file library glut32.lib pada directory C:\Program Files\Microsoft Visual Studio\VC98\Lib.

Selamat membuat graphics pada Visual C++ 6.0

ini tampilan-tampilannya:


Animasi Robot Berjalan

A. INSTALASI OGRE & PEMBUATAN MODEL ROBOT

Langkah-langkah untuk menginstall Ogre pada komputer/laptop kita adalah sebagai berikut :

1. Unduh perlengkapan/software yang dibutuhkan untuk menginstall Ogre ini, seperrti yang telah disebutkan sebelumnya

2. Ekstrak Eclipse Ganymede dari rar-nya

3. Install MinGW, lalu kita setting terlebih dulu di environment Windows, setelah itu, cek di command prompt dengan cara mengetikkan gcc –v

1.

1. Setelah itu install MYSYS

Lalu masuk kembali ke environment di Windows, untuk menambahkan Path kembali. Jika sudah kita masukkan ke Path, kita jalankan salah satu perintah Linux, seperti uname –a, maka pasti akan muncul hasilnya.

1. Lalu, install OgreSDK, setelah itu kita masukkan kembali ke Path di environment Windows.

1. Jalankan Eclipse Ganymede

2. Buat new C++ project

1. Pada bagian kanannya akan terlihat bahwa MinGW sudah terintegrasi

Jika berhasil maka pada bagian Project Explorer akan muncul sebuah hirarki

Tekan ctrl+F11, maka pada bagian console akan muncul output yang bertuliskan Hello World

1. Masuk ke bagian GCC C++ Compiler pada Tool Settings, selanjutnya ikutilah petunjuk table berikut ini untuk bagian-bagian properties pada pilihan Debug dan Release. Pastikan yang aktif adalah Release.

DEBUG

RELEASE

Preprocessor

Defined Symbols (-D):

· WIN32

· _WINDOWS

· _DEBUG

Defined Symbols (-D):

· WIN32

· _WINDOWS

· NDEBUG

Directories

Include Paths (-l):

· "${OGRE_HOME}\include"

· "${OGRE_HOME}\samples\include"

Dengan kutip “

Include Paths (-l):

· "${OGRE_HOME}\include"

· "${OGRE_HOME}\samples\include"

Dengan kutip “

Miscellaneous

Bag. Other flags :

-c -fmessage-length=0 -mthreads -fexceptions -fident

Bag. Other flags :

-c -fmessage-length=0 -mthreads -fexceptions -fident

1. Mash pada bagian Tool Setting, masuk ke bagian MinGW C++ Linker ikutilah petunjuk table berikut ini untuk bagian-bagian properties pada pilihan Debug dan Release. Pastikan yang aktif adalah Release.

DEBUG

RELEASE

Libraries

Libraries (-l):

· OgreMain_d

· OIS_d

Libraries (-l):

· OgreMain

· OIS

Library search path (-L):

· "${OGRE_HOME}\bin\debug"

Dengan kutip “

Library search path (-L):

· "${OGRE_HOME}\bin\release"

Dengan kutip “

Miscellaneous

Bag. Other Options (-Xlinker[option]):

· --enable-auto-image-base

· --add-stdcall-alias

Bag. Other Options (-Xlinker[option]):

· --enable-auto-image-base

· --add-stdcall-alias


Setelah itu, buat project C++ baru dengan nama robot berjalan, lalu buat class baru, dan isikan coding seperti yang terletak di bagian bawah ini (codingnya jika dilihat sama dengan ketika membuat grafik robot, hal ini memang karena penulisan ini memakai mesh robot seperti yang telah dijelaskan pada saat membuat grafik robot, dan ditambahkan coding untuk melakukan animasi gerak jalan).

Jika pada percobaan pembuatan grafik robot telah ada (saat praktikum), maka coding yang telah ada tersebut dapat diimport ke dalam project yang baru tadi.

1. Build project itu, maka akan dihasilkan exe, lalu masuk ke direktori OgreSDK untuk mengedit resource.cfg. Isilah bagian yang masih kosong menjadi seperti pada gambar di bawah ini (pada gambar di bawah direktori OgreSDK penulis berada di partisi C), pengisian ini dilakukan karena pada defaultnya, direktori yang terletak pada resource.cfg masih berupa titik-titik kosong.

B. PEMBUATAN ANIMASI ROBOT SEDERHANA

1.

#include "ExampleApplication.h"

#include

using namespace std;

class MoveDemoListener : public ExampleFrameListener

{

public:

MoveDemoListener(RenderWindow* win, Camera* cam, SceneNode *sn,

Entity *ent, deque<Vector3> &walk)

: ExampleFrameListener(win, cam, false, false), mNode(sn), mEntity(ent), mWalkList(walk)

{

// Set default values for variables

mWalkSpeed = 35.0f;

mDirection = Vector3::ZERO;

} // MoveDemoListener

/* This function is called to start the object moving to the next position

in mWalkList.

*/

bool nextLocation()

{

if (mWalkList.empty())

return false;

mDestination = mWalkList.front(); // this gets the front of the deque

mWalkList.pop_front(); // this removes the front of the deque

mDirection = mDestination - mNode->getPosition();

mDistance = mDirection.normalise();

Vector3 src = mNode->getOrientation() * Vector3::UNIT_X;

if ((1.0f + src.dotProduct(mDirection)) < 0.0001f)

{

mNode->yaw(Degree(180));

}

else

{

Ogre::Quaternion quat = src.getRotationTo(mDirection);

mNode->rotate(quat);

} // else

return true;

} // nextLocation()

else

{

mNode->translate(mDirection * move);

} // else

} // if

mAnimationState->addTime(evt.timeSinceLastFrame);

return ExampleFrameListener::frameStarted(evt);

}

bool frameStarted(const FrameEvent &evt)

{

if (mDirection == Vector3::ZERO)

{

if (nextLocation())

{

// Set walking animation

mAnimationState = mEntity->getAnimationState("Walk");

mAnimationState->setLoop(true);

mAnimationState->setEnabled(true);

}

}

else

{

Real move = mWalkSpeed * evt.timeSinceLastFrame;

mDistance -= move;

if (mDistance <= 0.0f)

{

mNode->setPosition(mDestination);

mDirection = Vector3::ZERO;

// Set animation based on if the robot has another point to walk to.

if (! nextLocation())

{

// Set Idle animation

mAnimationState = mEntity-getAnimationState("Idle");

mAnimationState->setLoop(true);

mAnimationState->setEnabled(true);

}

else

{

// Rotation Code will go here later

}

}

else

{

mNode->translate(mDirection * move);

} // else

} // if

mAnimationState->addTime(evt.timeSinceLastFrame);

return ExampleFrameListener::frameStarted(evt);

}

protected:

Real mDistance; // The distance the object has left to travel

Vector3 mDirection; // The direction the object is moving

Vector3 mDestination; // The destination the object is moving towards

AnimationState *mAnimationState; // The current animation state of the object

Entity *mEntity; // The Entity we are animating

SceneNode *mNode; // The SceneNode that the Entity is attached to

std::deque<Vector3> mWalkList; // The list of points we are walking to

Real mWalkSpeed; // The speed at which the object is moving

};

class MoveDemoApplication : public ExampleApplication

{

protected:

public:

MoveDemoApplication()

{

}

~MoveDemoApplication()

{

}

protected:

Entity *mEntity; // The entity of the object we are animating

SceneNode *mNode; // The SceneNode of the object we are moving

std::deque<Vector3> mWalkList; // A deque containing the waypoints

void createScene(void)

{

// Set the default lighting.

mSceneMgr->setAmbientLight(ColourValue(1.0f, 1.0f, 1.0f));

// Create the entity

mEntity = mSceneMgr->createEntity("Robot", "robot.mesh");

// Create the scene node

mNode = mSceneMgr->getRootSceneNode()->

createChildSceneNode("RobotNode", Vector3(0.0f, 0.0f, 25.0f));

mNode->attachObject(mEntity);

// Create the walking list

mWalkList.push_back(Vector3(550.0f, 0.0f, 50.0f));

mWalkList.push_back(Vector3(-100.0f, 0.0f, -200.0f));

// Create objects so we can see movement

Entity *ent;

SceneNode *node;

ent = mSceneMgr->createEntity("Knot1", "knot.mesh");

node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Knot1Node",

Vector3(0.0f, -10.0f, 25.0f));

node->attachObject(ent);

node->setScale(0.1f, 0.1f, 0.1f);

ent = mSceneMgr->createEntity("Knot2", "knot.mesh");

node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Knot2Node",

Vector3(550.0f, -10.0f, 50.0f));

node->attachObject(ent);

node->setScale(0.1f, 0.1f, 0.1f);

ent = mSceneMgr->createEntity("Knot3", "knot.mesh");

node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Knot3Node",

Vector3(-100.0f, -10.0f,-200.0f));

node->attachObject(ent);

node->setScale(0.1f, 0.1f, 0.1f);

// Set the camera to look at our handiwork

mCamera->setPosition(90.0f, 280.0f, 535.0f);

mCamera->pitch(Degree(-30.0f));

mCamera->yaw(Degree(-15.0f));

}

void createFrameListener(void)

{

mFrameListener= new MoveDemoListener(mWindow, mCamera, mNode, mEntity, mWalkList);

mFrameListener->showDebugOverlay(true);

mRoot->addFrameListener(mFrameListener);

}

};

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32

#define WIN32_LEAN_AND_MEAN

#include "windows.h"

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)

#else

int main(int argc, char **argv)

#endif

{

// Create application object

MoveDemoApplication app;

try {

app.go();

} catch(Exception& e){

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32

MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!",

MB_OK | MB_ICONERROR | MB_TASKMODAL);

#else

fprintf(stderr, "An exception has occurred: %s\n",

e.getFullDescription().c_str());

#endif

}

return 0;

1. Setelah itu, save dan build coding program di atas.

Lalu, kita cari di direktori release/debug di workspace yang tersimpan sebagai direktori penyimpanan oleh Eclipse (seharusnya terletak pada Release, tetapi penulis lupa menempatkan pada Release, sehingga ada di Debug)

2. Output dari hasil coding animasi robot di atas adalah sebagai berikut :



}