Analisis Algoritma A Analisis Sistem

n 1,0 : g 1,0 = 1 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal1,0 = abs1 - 2 + abs0 - 2 = abs-1 + abs-2 = 3 h_diagonaln = minabsn.x-goal.x, absn.y-goal.y 57 h_diagonal1,0 = minabs1 - 2+abs0 - 2 = minabs-1+abs-2 = min 3 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h1,0 = - 3 + 3-2-3 = -3 + 9 = 6 f 1,0 = g 1,0 + h 1,0 = 1 + 6 = 7 n 0,1 : g 0,1 = 1 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal0,1 = abs0 - 2 + abs1 - 2 = abs-2 + abs-1 = 3 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal0,1 = minabs0 - 2+abs1 - 2 = minabs-2+abs-1 = min 3 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h0,1 = -3 + 3-2-3 = -3 + 9 = 6 58 f 0,1 = g 0,1 + h 0,1 = 1 + 6 = 7 0 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.5 Langkah pertama pencarian bestnode Keterangan : Simpul yang diperiksa Simpul awal Simpul tujuan Pada gambar 3.5 terdapat tiga simpul yang mungkin menjadi best node yaitu 1,0 dengan fn=7, 1,1 dengan fn=5 dan 0,1 dengan fn=7. Dari ke tiga simpul yang mungkin maka dipilihlah simpul 1,1 dengan biaya terkecil yaitu 5. Langkah ke dua n 2,2 : g 2,2 = 2 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal2,2 = abs2 - 2 + abs2 - 2 = abs0 + abs0 = 0 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal2,2 = minabs2 - 2+abs2 - 2 = minabs0+abs0 = min 0 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h0,1 = -0 + 0-2-0 = 0 + 0 = 0 f 2,2 = g 2,2 + h 2,2 = 2 + 0 = 2 n 2,1 : g 2,1 = 2 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal2,1 = abs2 - 2 + abs1 - 2 = abs0 + abs-1 = 1 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal2,1 = minabs2 - 2+abs1 - 2 = minabs0+abs-1 = min 1 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h2,1 = -1 + 1-2-1 = -1 + 3 = 2 f 2,1 = g 2,1 + h 2,1 = 2 + 2 = 4 n 1,2 : g 1,2 = 2 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal1,2 = abs1 - 2 + abs2 - 2 = abs-1 + abs0 = 1 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal1,2 = minabs1 - 2+abs2 - 2 = minabs-1+abs0 = min 1 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h1,2 = -1 + 1-2-1 = -1 + 3 = 2 f 1,2 = g 1,2 + h 1,2 = 2 + 2 = 4 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.6 Langkah kedua pencarian bestnode Simpul yang diperiksa Simpul awal Simpul tujuan Simpul yang dipilih Dari ke tiga simpul yang mungkin maka dipilihlah simpul 2,2 dengan biaya terkecil yaitu 2. Langkah ke tiga n 3,3 : g 3,3 = 3 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal3,3 = abs3 - 2 + abs3 - 2 = abs1 + abs1 = 2 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal3,3 = minabs3 - 2+abs3 - 2 = minabs1+abs1 = min 2 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h3,3 = -2 + 2-2-2 = -2 + 6 = 4 f 3,3 = g 3,3 + h 3,3 = 3 + 4 = 7 n 3,2 : g 3,2 = 3 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal3,2 = abs3 - 2 + abs2 - 2 = abs1 + abs0 = 1 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal3,2 = minabs3 - 2+abs2 - 2 = minabs1+abs0 = min 1 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h3,2 = -1 + 1-2-1 = -1 + 3 = 2 f 3,2 = g 3,2 + h 3,2 = 3 + 2 = 5 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.7 Langkah ketiga pencarian bestnode Simpul yang diperiksa Simpul awal Simpul tujuan Simpul yang dipilih Dari ke dua simpul yang mungkin maka dipilihlah simpul 3,2 dengan biaya terkecil yaitu 5. Langkah ke empat n 4,2 : g 4,2 = 4 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal4,2 = abs4 - 2 + abs2 - 2 = abs2 + abs0 = 2 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal4,2 = minabs4 - 2+abs2 - 2 = minabs2+abs0 = min 2 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h4,2 = -2 + 2-2-2 = -2 + 6 = 4 f 4,2 = g 4,2 + h 4,2 = 4 + 4 = 8 n 4,3 : g 4,3 = 4 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal4,3 = abs4 - 2 + abs3 - 2 = abs2 + abs1 = 3 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal4,3 = minabs4 - 2+abs3 - 2 = minabs2+abs1 = min 3 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h4,3 = -3 + 3-2-3 = -3 + 9 = 6 f 4,3 = g 4,3 + h 4,3 = 4 + 6 = 10 n 4,1 : g 4,1 = 4 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal4,1 = abs4 - 2 + abs1 - 2 = abs2 + abs-1 = 3 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal4,1 = minabs4 - 2+abs1 - 2 = minabs2+abs-1 = min 3 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h4,1 = -3 + 3-2-3 = -3 + 9 = 6 f 4,1 = g 4,1 + h 4,1 = 4 + 6 = 10 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.8 Langkah keempat pencarian bestnode Simpul yang diperiksa Simpul awal Simpul tujuan Simpul yang dipilih Dari ke tiga simpul yang mungkin maka dipilihlah simpul 4,2 dengan biaya terkecil yaitu 8. Langkah ke lima n 5,2 : g 5,2 = 5 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal5,2 = abs5 - 2 + abs2 - 2 = abs3 + abs0 = 3 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal5,2 = minabs5 - 2+abs2 - 2 = minabs3+abs0 = min 3 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h5,2 = -3 + 3-2-3 = -3 + 9 = 6 f 5,2 = g 5,2 + h 5,2 = 5 + 6 = 11 n 5,3 : g 5,3 = 5 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal5,3 = abs5 - 2 + abs3 - 2 = abs3 + abs1 = 4 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal5,3 = minabs5 - 2+abs3 - 2 = minabs3+abs1 = min 4 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h5,3 = -4 + 4-2-4 = -4 + 12 = 8 f 5,3 = g 5,3 + h 5,3 = 5 + 8 = 13 n 5,1 : g 5,1 = 5 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal5,1 = abs5 - 2 + abs1 - 2 = abs3 + abs-1 = 4 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal5,1 = minabs5 - 2+abs1 - 2 = minabs3+abs-1 = min 4 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h5,1 = -4 + 4-2-4 = -4 + 12 = 8 f 5,1 = g 5,1 + h 5,1 = 5 + 8 = 13 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.9 Langkah kelima pencarian bestnode Simpul yang diperiksa Simpul awal Simpul tujuan Simpul yang dipilih Dari ke tiga simpul yang mungkin maka dipilihlah simpul 5,2 dengan biaya terkecil yaitu 11. Langkah ke enam n 6,2 : g 6,2 = 6 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal6,2 = abs6 - 2 + abs2 - 2 = abs4 + abs0 = 4 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal6,2 = minabs6 - 2+abs2 - 2 = minabs4+abs0 = min 4 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h6,2 = -4 + 4-2-4 = -4 + 12 = 8 f 6,2 = g 6,2 + h 6,2 = 6 + 8 = 14 n 6,3 : g 6,3 = 6 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal6,3 = abs6 - 2 + abs3 - 2 = abs4 + abs1 = 5 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal6,3 = minabs6 - 2+abs3 - 2 = minabs4+abs1 = min 5 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h6,3 = -5 + 5-2-5 = -5 + 15 = 10 f 6,3 = g 6,3 + h 6,3 = 6 + 10 = 16 n 6,1 : g 6,1 = 6 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal6,1 = abs6 - 2 + abs1 - 2 = abs4 + abs-1 = 5 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal6,1 = minabs6 - 2+abs1 - 2 = minabs4+abs-1 = min 5 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h6,1 = -5 + 5-2-5 = -5 + 15 = 10 f 6,1 = g 6,1 + h 6,1 = 6 + 10 = 16 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.10 Langkah keenam pencarian bestnode Simpul yang diperiksa Simpul awal Simpul tujuan Simpul yang dipilih Dari ke tiga simpul yang mungkin maka dipilihlah simpul 6,2 dengan biaya terkecil yaitu 14. Langkah ke 7 n 7,1 : g 7,1 = 7 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal7,1 = abs7 - 2 + abs1 - 2 = abs5 + abs-1 = 6 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal7,1 = minabs7 - 2+abs1 - 2 = minabs5+abs-1 = min 6 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h7,1 = -6 + 6-2-6 = -6 + 18 = 12 f 7,1 = g 7,1 + h 7,1 = 7 + 12 = 19 n 6,1 : g 6,1 = 7 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal6,1 = abs6 - 2 + abs1 - 2 = abs4 + abs-1 = 5 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal6,1 = minabs6 - 2+abs1 - 2 = minabs4+abs-1 = min 5 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h6,1 = -5 + 5-2-5 = -5 + 15 = 10 f 6,1 = g 6,1 + h 6,1 = 7 + 10 = 17 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.11 Langkah ketujuh pencarian bestnode Simpul yang diperiksa Simpul awal Simpul tujuan Simpul yang dipilih Dari ke dua simpul yang mungkin maka dipilihlah simpul 6,1 dengan biaya terkecil yaitu 17. Langkah ke delapan n 7,0 : g 7,0 = 8 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal7,0 = abs7 - 2 + abs0 - 2 = abs5 + abs-2 = 7 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal7,0 = minabs7 - 2+abs0 - 2 = minabs5+abs-2 = min 7 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h7,0 = -7 + 7-2-7 = -7 + 21 = 14 f 7,0 = g 7,1 + h 7,1 = 8 + 14 = 22 n 7,1 : g 7,1 = 8 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal7,1 = abs7 - 2 + abs1 - 2 = abs5 + abs-1 = 6 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal7,1 = minabs7 - 2+abs1 - 2 = minabs5+abs-1 = min 6 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h7,1 = -6 + 6-2-6 = -6 + 18 = 12 f 7,1 = g 7,1 + h 7,1 = 8 + 12 = 20 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.12 Langkah kedelapan pencarian bestnode Simpul yang diperiksa Simpul awal Simpul tujuan Simpul yang dipilih Dari ke dua simpul yang mungkin maka dipilihlah simpul 7,1 dengan biaya terkecil yaitu 20. Langkah ke sembilan n 8,0 : g 8,0 = 9 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal8,0 = abs8 - 2 + abs0 - 2 = abs6 + abs-2 = 8 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal8,0 = minabs8 - 2+abs0 - 2 = minabs6+abs-2 = min 8 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h8,0 = -8 + 8-2-8 = -8 + 24 = 16 f 8,0 = g 7,1 + h 7,1 = 9 + 16 = 25 n 8,1 : g 8,1 = 9 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal8,1 = abs8 - 2 + abs1 - 2 = abs6 + abs-1 = 7 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal8,1 = minabs8 - 2+abs1 - 2 = minabs6+abs-1 = min 7 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h8,1 = -7 + 7-2-7 = -7 + 21 = 14 f 8,1 = g 8,1 + h 8,1 = 9 + 14 = 23 n 8,2 : g 8,2 = 9 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal8,2 = abs8 - 2 + abs2 - 2 = abs6 + abs0 = 6 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal8,2 = minabs8 - 2+abs2 - 2 = minabs6+abs0 = min 6 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h8,2 = -6 + 6-2-6 = -6 + 18 = 12 f 8,2 = g 8,2 + h 8,2 = 9 + 12 = 21 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.13 Langkah kesembilan pencarian bestnode Simpul yang diperiksa Simpul awal Simpul tujuan Simpul yang dipilih Dari ke dua simpul yang mungkin maka dipilihlah simpul 8,2 dengan biaya terkecil yaitu 21. Langkah ke sepuluh n 9,1 : g 9,1 = 10 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal9,1 = abs9 - 2 + abs1 - 2 = abs7 + abs-1 = 8 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal9,1 = minabs9 - 2+abs1 - 2 = minabs7+abs-1 = min 8 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h9,1 = -8 + 8-2-8 = -8 + 24 = 16 f 9,1 = g 9,1 + h 9,1 = 10 + 16 = 26 n 9,2 : g 9,2 = 10 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal9,2 = abs9 - 2 + abs2 - 2 = abs7 + abs0 = 7 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal9,2 = minabs9 - 2+abs2 - 2 = minabs7+abs0 = min 7 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h9,2 = -7 + 7-2-7 = -7 + 21 = 14 f 9,2 = g 9,2 + h 9,2 = 10 + 14 = 24 n 9,3 : g 9,3 = 10 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal9,3 = abs9 - 2 + abs3 - 2 = abs7 + abs1 = 8 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal9,3 = minabs9 - 2+abs3 - 2 = minabs7+abs1 = min 8 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h9,3 = -8 + 8-2-8 = -8 + 24 = 16 f 9,3 = g 9,3 + h 9,3 = 10 + 16 = 26 n 8,3 : g 8,3 = 10 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal8,3 = abs8 - 2 + abs3 - 2 = abs6 + abs1 = 7 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal8,3 = minabs8 - 2+abs3 - 2 = minabs6+abs1 = min 7 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h8,3 = -7 + 7-2-7 = -7 + 21 = 14 f 8,3 = g 8,3 + h 8,3 = 10 + 14 = 24 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.14 Langkah kesepuluh pencarian bestnode Simpul yang diperiksa Simpul awal Simpul tujuan Simpul yang dipilih Dari ke empat simpul yang mungkin maka dipilihlah simpul 9,2 dengan biaya terkecil yaitu 24. Langkah ke sebelas n 10,1 : g 10,1 = 11 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal10,1 = abs10 - 2 + abs1 - 2 = abs8 + abs-1 = 9 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal10,1 = minabs10 - 2+abs1 - 2 = minabs8+abs-1 = min 9 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h10,1 = -9 + 9-2-9 = -9 + 27 = 18 f 10,1 = g 10,1 + h 10,1 = 11 + 18 = 29 n 10,2 : g 10,2 = 11 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal10,2 = abs10 - 2 + abs2 - 2 = abs8 + abs0 = 8 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal10,2 = minabs10 - 2+abs2 - 2 = minabs8+abs0 = min 8 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h10,2 = -8 + 8-2-8 = -8 + 24 = 16 f 10,2 = g 10,2 + h 10,2 = 11 + 16 = 27 n 10,3 : g 10,3 = 11 h_orthogonaln = absn.x-goal.x + absn.y-goal.y h_orthogonal10,3 = abs10 - 2 + abs3 - 2 = abs8 + abs1 = 9 h_diagonaln = minabsn.x-goal.x + absn.y-goal.y h_diagonal10,3 = minabs10 - 2+abs3 - 2 = minabs8+abs1 = min 9 hn = h_diagonaln + h_orthogonal n – 2 h_diagonaln h10,3 = -9 + 9-2-9 = -9 + 27 = 18 f 10,3 = g 10,3 + h 10,3 = 11 + 18 = 29 Dari ke tiga simpul yang mungkin menjadi bestnode maka dipilihlah simpul 10,2 dengan biaya terkecil yaitu 27, dan dikenali sebagai simpul tujuan yaitu 10,2 berarti solusi telah ditemukan. 0 1 2 3 4 5 6 7 8 9 10 1 2 3 Gambar 3.15 Hasil pencarian jalan dengan Algoritma A

3.1.4 Collision Detection Karakter terhadap Rintangan atau NPC

Collision atau tubrukan adalah metode yang selalu dipakai di dalam pengembangan game. Hampir semua game memiliki collision. Namun, apabila terlalu banyak terjadi collision dengan tingkat pengecekan yang kurang tepat dapat menyebabkan performa game menjadi menurun. Pada game Tradisional Egrang collision diimplementasikan terhadap karakter dan rintangan atau NPC. Untuk melakukan pendeteksian collision pada karakter terhadap rintangan atau NPC dengan menggunakan method line shape collision yaitu pengecekan didasarkan pada bound kotak luar objek. Proses ini memiliki kelebihan tidak memakan banyak memori. Contoh collision antara karkater dengan rintangan dapat dilihat pada gambar 3.16. Gambar 3.16 Collision antara karakter dengan rintangan Cara melakukan deteksi tubrukannya yaitu dengan menambahkan method collidesWith entity di dalam method onUpdate. Contoh pendeteksian collision antara karakter dengan rintangan, dan karakter dengan NPC. Sebelumnya player karakter dan kayu rintangan terlebih dahulu dideklarasikan, lalu diinisialisasi pada methode onLoadScene. Nilai true akan dikembalikan apabila kedua entity tersebut saling bersinggungan tubrukan. Misalnya apabila player bertubrukan dengan kayu maka kayu akan terbalik dan jika tidak bertubrukan maka kayu akan tetap seperti semula. Untuk melakukan hal tersebut tambahkan method setFlippedVertical dengan nilai true di dalam method collidesWith.

3.1.5 NPC menghalangi Karakter

Agar NPC dapat menghalangi atau mendahului karakter, pada method onUpdate NPC memerlukan data dari posisi karakter berada. Sehingga NPC dapat memperhitungkan apakah perlu menambah kecepatan atau tidak. Misalkan enemy tertinggal di belakang karakter, agar enemy dapat mengejar karakter maka diperlukan koordinat posisi player berada berupa data x dan data y. Setelah data koordinat posisi player sudah diterima oleh enemy dan posisinya berada di depannya, maka enemy akan menambahkan kecepatan hingga posisi player berada di belakang enemy. Akantetapi apabila posisinya di depan player makan kecepatannya akan tetap. Sebelumnya player dan enemy terlebih dahulu dideklarasikan, lalu diinisialisasi pada methode onLoadScene.

3.1.6 Analisis Accelerometer

Untuk melakukan pendeteksian perubahan axis dengan sensor accelerometer, diperlukan tiga komponen yaitu SensorManager, Sensor, dan SensorEventListener. Untuk menggunakan suatu sensor, objek SensorManager harus dihubungkan terlebih dahulu dengan sistem android yang mengatur bagian sensor. Selain itu, sensor juga harus ditentukan ingin menggunakan sensor accelerometer. Untuk bisa mendeteksi sensor, suatu class harus didaftarkan terlebih dahulu. Setelah didaftarkan, setiap ada perubahan axis, android akan memanggil fungsi onSensorChanged. Pada fungsi tersebut proses pengambilan nilai axis dari posisi telepon genggam dilakukan. Ketika sudah tidak menggunakan sensor lagi, terjadi proses penghapusan class yang bersangkutan dari daftar. OnAccuracyChanged tidak digunakan karena tidak melakukan perubahan accuracy pada sensor accelerometer. Gambar 3.17 Pendeteksian axis Dalam penerapannya, dibutuhkan perhitungan untuk mendefinisikan kecepatan dan percepatan dalam permainan dan AccelerometerHandler class untuk penanganan accelerometernya. 1. Perhitungan kecepatan dan Percepatan Nilai-nilai accelerometer terkadang akan mendapatkan nilai yang lebih dari jangkauan besaran accelerometer. Hal ini disebabkan karena ketidak akuratan nilai-nilai yang dilaporkan oleh listener, sehingga harus melakukan perhitungan nilai-nilainya agar dapat sesuai. Berikut adalah perkiraan besaran percepatan yang akan digunakan dalam pembangunan game tradisional egrang : Tabel 3.2 Perkiraan Besaran Percepatan No Besaran kecepatan velocity 1 Ketika sepenuhnya miring ke kiri maka sumbu y akan melaporkan percepatan sebesar -10 ms2 dan ketika sepenuhnya miring ke kanan maka sumbu y akan melaporkan percepatan sebesar 10 ms2. 2 Ketika sepenuhnya miring ke atas maka sumbu x akan melaporkan percepatan sebesar -10 ms2 dan ketika sepenuhnya miring ke bawah maka sumbu x akan melaporkan percepatan sebesar 10 ms2. 3 Kecepatan untuk gerakan horizontal karakter pemain didefinisikan sebesar 0-20 ms2. Semua perhitungan digunakan untuk menormalkan pembacaan accelerometer dengan membagi nilai absolute maksimum yaitu 10 dan kemudian dikalikan dengan kecepatan maksimum horizontal. Dengan demikian, maka akan didapat percepatan sebesar 20 ms di sumbu-y. 2. Pembacaan Sensor Accelerometer Untuk menggerakkan karakter menggunakan sensor accelerometer pada device, yaitu inisialisasi variabel pada class egrang. Setelah mendeklarasikan variable, untuk mendeteksi apakah device memiliki sensor accelerometer. Pendeteksian dilakukan pada constructor class egrang dengan menggunakan method sensorManager. Setelah mendeteksi sensor, selanjutnya yaitu mendapatkan nilai axis dari posisi device. Untuk mendapatkan nilai axis dari posisi device dengan menambahkan method onSensorChanged SensorEvent event. Langkah terakhir yaitu menambahkan method updateSpritePosition untuk menghitung posisi karakter ketika device dimiringkan, namun dengan batasan-batasan pada nilai axis. Hal ini dimaksudkan agar karakter tidak melewati batas layar pada device. Apabila proses perhitungan sudah dilakukan maka proses akan dilakukan dengan pemanggilan perintah player.setPosition sX, sY, dimana nilai sX dan sY adalah nilai dari posisi karakter ketika device dimiringkan.