Programming your first game/Input dengan mouse: Difference between revisions

From CPC Game Making
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 25: Line 25:
* <syntaxhighlight lang="gdscript">if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:</syntaxhighlight> Property <code>button_index</code> menunjukkan tipe mouse button yang terlibat dalam InputEvent (selain <code>MOUSE_BUTTON_LEFT</code>, ada pula <code>MOUSE_BUTTON_RIGHT</code>, <code>MOUSE_BUTTON_WHEEL_UP</code>, dll.). <br>Dengan menggunakan property <code>pressed</code>, game hanya akan menghitung momen ketika pemain mulai <i>menahan</i> tombol kiri mouse sebagai sebuah klik.
* <syntaxhighlight lang="gdscript">if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:</syntaxhighlight> Property <code>button_index</code> menunjukkan tipe mouse button yang terlibat dalam InputEvent (selain <code>MOUSE_BUTTON_LEFT</code>, ada pula <code>MOUSE_BUTTON_RIGHT</code>, <code>MOUSE_BUTTON_WHEEL_UP</code>, dll.). <br>Dengan menggunakan property <code>pressed</code>, game hanya akan menghitung momen ketika pemain mulai <i>menahan</i> tombol kiri mouse sebagai sebuah klik.
** <syntaxhighlight lang="gdscript">if event.button_index == MOUSE_BUTTON_LEFT and not event.pressed:</syntaxhighlight> Seandainya kode dimodifikasi seperti ini, game hanya akan menghitung momen ketika pemain <i>melepaskan</i> tombol kiri mouse sebagai sebuah klik.
** <syntaxhighlight lang="gdscript">if event.button_index == MOUSE_BUTTON_LEFT and not event.pressed:</syntaxhighlight> Seandainya kode dimodifikasi seperti ini, game hanya akan menghitung momen ketika pemain <i>melepaskan</i> tombol kiri mouse sebagai sebuah klik.
* <syntaxhighlight lang="gdscript">if is_pixel_opaque(get_local_mouse_position()):</syntaxhighlight> Fungsi <code>get_local_mouse_position() memberikan posisi (x, y) kursor mouse. </code>Fungsi <code>is_pixel_opaque()</code> memberikan nilai <code>True</code> hanya untuk nilai posisi yang tercakup dalam area tekstur gambar cookie. Dengan demikian, klik di luar batas gambar takkan menghasilkan apa-apa.
* <syntaxhighlight lang="gdscript">if is_pixel_opaque(get_local_mouse_position()):</syntaxhighlight> Fungsi <code>get_local_mouse_position()</code> memberikan posisi (x, y) kursor mouse. Fungsi <code>is_pixel_opaque()</code> memberikan nilai <code>True</code> bilamana diberikan input posisi yang tercakup dalam area tekstur gambar cookie. Dengan demikian, klik di luar batasan gambar takkan menghasilkan apa-apa.


Bilamana ada fungsi yang kalian ingin pelajari lebih lanjut, tahan tombol Ctrl dan klik segmen kode yang dikehendaki. Editor akan segera membuka dokumentasi Godot, yang tersedia pula secara daring ([https://docs.godotengine.org/en/stable/ https://docs.godotengine.org/en/stable/]).  
=== Dokumentasi ===
 
Kalau ada fungsi yang kalian ingin pelajari lebih lanjut, tahan tombol Ctrl dan klik keyword yang dikehendaki. Editor akan segera membuka dokumentasi Godot, yang tersedia pula secara daring ([https://docs.godotengine.org/en/stable/ https://docs.godotengine.org/en/stable/]).  


{{Info try it|Sekarang, game hanya akan bereaksi terhadap aksi klik kiri. Coba buat supaya cookie dapat menerima input klik kiri maupun kanan.}}
{{Info try it|Sekarang, game hanya akan bereaksi terhadap aksi klik kiri. Coba buat supaya cookie dapat menerima input klik kiri maupun kanan.}}


=== Berganti view di editor ===
[[File:Top.png|thumb]] Jangan lupa bahwa kalian bisa mengganti view dari 2D ke Script (atau sebaliknya) dari menu di bagian atas. {{Clear}}
== Bermain dengan sound effect ==
== Bermain dengan sound effect ==
Kemudian, kita akan tambahkan sebuah sound effect ketika cookie diklik.
[[File:Add_child_node_to_cookie.jpg|thumb]] Klik kanan pada entri Sprite2D di scene tree, di kiri layar. Tambahkan sebuah child node, beri tipe AudioStreamPlayer2D.
[[File:Crumble.gif]] Drag file <code>crumble.mp3</code> ke field Stream di menu Inspector. Pastikan bahwa node AudioStreamPlayer2D-lah yang terseleksi pada scene tree.
Tambahkanlah satu line berikut pada script <code>cookie.gd</code>.
<syntaxhighlight lang="gdscript" line>
func _input(event):
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
if is_pixel_opaque(get_local_mouse_position()):
$AudioStreamPlayer2D.play()  # play sound
print("Clicked!")
</syntaxhighlight>
Run project; cookie kini akan mengeluarkan suara bila diklik.

Latest revision as of 23:45, 21 July 2025

Bila diperhatikan, pemain masih belum mampu berinteraksi sama sekali dengan game kita. Maka, kita perlu menambah sedikit logika pemrograman agar Cookie di layar memberikan respons tertentu ketika diklik pemain.

Node scripting

Layar script editor yang masih kosong akan muncul setelah script file script dibuat untuk pertama kalinya

Klik kanan pada entri Sprite2D di kiri atas, lalu tekan "Attach Script". Secara default, file script ini akan disimpan di res://cookie.gd, sesuai dengan nama scene.

Tambahkan beberapa baris kode berikut. Simpan hasil modifikasi script dengan Ctrl+S.

func _input(event):
	if event is InputEventMouseButton:
		if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
			if is_pixel_opaque(get_local_mouse_position()):
				print("Clicked!")

Run project dan amati hasilnya.

Sebuah pesan singkat "Clicked!" akan dikeluarkan pada output terminal setiap kali pemain melakukan klik kiri dengan mouse pada area cookie.

Coba pahami kode yang diberikan tersebut.

  • if event is InputEventMouseButton:
    
    Di Godot, ada banyak InputEvent yang dapat diterima pada fungsi _input(), dari InputEventMouseButton untuk merepresentasikan mouse button yang ditekan, hingga InputEventScreenDrag untuk merepresentasikan gestur menggeser pada layar touchscreen.
  • if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
    
    Property button_index menunjukkan tipe mouse button yang terlibat dalam InputEvent (selain MOUSE_BUTTON_LEFT, ada pula MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_WHEEL_UP, dll.).
    Dengan menggunakan property pressed, game hanya akan menghitung momen ketika pemain mulai menahan tombol kiri mouse sebagai sebuah klik.
    • if event.button_index == MOUSE_BUTTON_LEFT and not event.pressed:
      
      Seandainya kode dimodifikasi seperti ini, game hanya akan menghitung momen ketika pemain melepaskan tombol kiri mouse sebagai sebuah klik.
  • if is_pixel_opaque(get_local_mouse_position()):
    
    Fungsi get_local_mouse_position() memberikan posisi (x, y) kursor mouse. Fungsi is_pixel_opaque() memberikan nilai True bilamana diberikan input posisi yang tercakup dalam area tekstur gambar cookie. Dengan demikian, klik di luar batasan gambar takkan menghasilkan apa-apa.

Dokumentasi

Kalau ada fungsi yang kalian ingin pelajari lebih lanjut, tahan tombol Ctrl dan klik keyword yang dikehendaki. Editor akan segera membuka dokumentasi Godot, yang tersedia pula secara daring (https://docs.godotengine.org/en/stable/).

Try it yourself!

  1. Sekarang, game hanya akan bereaksi terhadap aksi klik kiri. Coba buat supaya cookie dapat menerima input klik kiri maupun kanan.

Berganti view di editor

Jangan lupa bahwa kalian bisa mengganti view dari 2D ke Script (atau sebaliknya) dari menu di bagian atas.

Bermain dengan sound effect

Kemudian, kita akan tambahkan sebuah sound effect ketika cookie diklik.

Klik kanan pada entri Sprite2D di scene tree, di kiri layar. Tambahkan sebuah child node, beri tipe AudioStreamPlayer2D.

Drag file crumble.mp3 ke field Stream di menu Inspector. Pastikan bahwa node AudioStreamPlayer2D-lah yang terseleksi pada scene tree.

Tambahkanlah satu line berikut pada script cookie.gd.

func _input(event):
	if event is InputEventMouseButton:
		if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
			if is_pixel_opaque(get_local_mouse_position()):
				$AudioStreamPlayer2D.play()  # play sound
				print("Clicked!")

Run project; cookie kini akan mengeluarkan suara bila diklik.