Move Object with Mouse | Blender Game Engine


Menggerakan Object/karakter utama dalam sebuah game ada beberapa cara yakni dengan keyboard, mouse dan joystick. Pada kesempatan kali ini saya ingin  sedikit mengulas pergerakan karakter pada game dengan mouse pada Blender Game Engine. Mari kita menuju pada langkah yang pertama.

Menampilkan Mouse

Pertama mari kita buat mouse tampil di layar game. Buat text baru di jendela text editor Blender dan beri nama ShowMouse.py . Kemudian isi text tersebut dengan kode berikut:

import Rasterizer
Rasterizer.showMouse(True)

Kemudian seleksi/select camera dan pada logic editor tambahkan always sensor. Kemudian hubungkan always sensor dengan python controller.  Kemudian pada python controller pilih Script ShowMouse.py  yang telah kita buat. Untuk lebih jelasnya perhatikan gambar berikut:

snapshot149

snapshot154

ok sekarang mouse telah tampil, mari ke tahap selanjutnya

Menggerakkan object dengan mouse

Sebelumnya mari kita membuat simple scene. Simple saja namun pergerakan object akan nampak  jelas terlihat (tambahkan object plane sebagai alas yang unik). Kemudian tambahkan object cube dan ganti nama cube dengan Player.

snapshot150

Seleksi cube dan pada logic editor berikut ini pengaturannya:

snapshot153

yap, tambahkan mouse sensor dan pilih Left Button lalu aktifkan true level triggering . Kemudian hubungkan mouse sensor dengan python controller. Pada python controller pilih script dan masukkan text MoveOBJ.py yang akan kita buat.

yap mari kita buat script MoveOBJ.py yang akan mendefinisikan bagaimana reaksi objek terhadap sensor left button mouse. Beginilah kira-kira isi script MoveOBJ.py :

import bge
from bge import logic

cont = bge.logic.getCurrentController()
owner = cont.owner

mouse = cont.sensors["Mouse"]
width = bge.render.getWindowWidth()
width = width/2
height = bge.render.getWindowHeight()
height = height/2
#mendefinisikan ukuran layar / resolusi,lalu dibagi dua agar mendapatkan titik tengah layar

pos = mouse.position

posX = width - pos[0]
posX = posX * 0.02 * -1

posY = height - pos[1]
posY = posY * 0.02
#mendapatkan lokasi mouse pada layar dalam axis X dan Y

def Init():

    if not "init" in owner:

        owner["init"] = 1

def Update():

    soft = 0.2 #kehalusan gerakan, makin kecil makin slow, maki besar makin cepat
    owner.position.x += posX * soft
    owner.position.y += posY * soft
    #mendapatkan posisi x dan y dari object mengikuti posisi mouse

Init()
Update()

(note script di atas saya dapat dari kombinasi dua script dari dua sumber berikut: http://solarlune-gameup.blogspot.com/2011/02/using-python-in-blender-game-engine_28.html dan http://www.youtube.com/watch?v=5AdQXcFKtuA )

OK begini kira-kira previewnya:

Ok sekarang object telah berhasil bergerak mengikuti left button mouse. Namun yang masih menjadi masalah adalah object dapat bergerak keluar layar. Untuk mengatasinya yang perlu dilakukan adalah, yap Anda benar, yang perlu dilakukan adalah membuat layar / camera selalu mengikuti object Player. Mari kita lakukan:

Membuat layar Camera mengkikuti object player

snapshot155

Pertama select camera lalu pada logic editor tambahkan Always sensor dan aktifkan True level triggering. Kemudian hubungkan always sensor dengan python controller. Pada python controller gunakan Module. Module adalah script python yang terdapat pada direktori yang sama dengan file blender .blend . Module Camera2.Camera artinya kita menggunakan modul Camera dari scripts  Camera2.py .

Kemudian buat scripts Camera2.py pada direktori file .blend . Script agar Camera mengikuti object ini saya ambil dari http://solarlune-gameup.blogspot.com/2011/02/using-python-in-blender-game-engine_28.html. Saya merekomendasikan blog ini untuk belajar Blender Game Engine dengan Python. Berikut ini isi script Camera2.py :

from bge import logic

def Camera():

cont = logic.getCurrentController()
 obj = cont.owner
 sce = logic.getCurrentScene()

 def Init():

 if not 'init' in obj:

 obj['init'] = 1
 obj['target'] = sce.objects['Player']
 obj['depth'] = obj.position.y - obj['target'].position.y

 def Update():

 tarpos = obj['target'].worldPosition
 pos = obj.worldPosition

 soft = 1
 obj.position.x += (tarpos.x - pos.x) * soft
 obj.position.y += (tarpos.y + obj['depth'] - pos.y) * soft

 Init()
 Update()

OK beginilah previewnya:

Ok misi kita berhasil namun masih saja ada masalah yaitu masalah angle. Yup benar sekali object terlihat kaku dalam artian tidak mengalami perubahan sudut  (pada z axis ) sama sekali terhadap pergerakan mouse. Kalua pembaca mempunyai solusi untuk hal ini atau ada ide yang lebih baik lahi untuk pergerakan object dengan mouse silahkan sampaikan di kolom komentar 🙂

Thanks for reading, happy Blending

Referensi:

http://solarlune-gameup.blogspot.com/2011/02/using-python-in-blender-game-engine_28.html

http://www.youtube.com/watch?v=5AdQXcFKtuA

Leave a comment