Ich hab bei meinen Panzerspiel eine Colissions Abfrage die tile bassierend ist.
Ich habe damit noch nie gearbeitet und habe mir Codes zusammen gesucht.
Wenn ich ein Viereck als Player benutze das 16x16 groß ist und sich nicht dreht, ist die Abfrage ganz sauber.
Ich habe aber einen Panzer (48x34) als Player der sich natürlich auch dreht.
Sobald er gehen ein Colissionstile (16x16) kommt springt er richtig zurück oder zur Seite.
Kann jemand sich den Code mal anschauen?
Vor allem die Zeilen mit
verstehe ich nicht ganz. Was ist mit diesen Zahlen?
Ich habe mal den ganzen Code rein kopiert, damit man auch sieht wie ich den Panzer bewege.
Alles anzeigen
Ich habe damit noch nie gearbeitet und habe mir Codes zusammen gesucht.
Wenn ich ein Viereck als Player benutze das 16x16 groß ist und sich nicht dreht, ist die Abfrage ganz sauber.
Ich habe aber einen Panzer (48x34) als Player der sich natürlich auch dreht.
Sobald er gehen ein Colissionstile (16x16) kommt springt er richtig zurück oder zur Seite.
Kann jemand sich den Code mal anschauen?
Vor allem die Zeilen mit
verstehe ich nicht ganz. Was ist mit diesen Zahlen?
Ich habe mal den ganzen Code rein kopiert, damit man auch sieht wie ich den Panzer bewege.
GML-Quellcode
- var bbox_side;
- global.full -= 0.01;
- if(gamepad_is_connected(0)){
- key_right = gamepad_button_check(0, gp_padr);
- key_left = gamepad_button_check(0, gp_padl);
- key_up = gamepad_button_check(0, gp_padu);
- key_down = gamepad_button_check(0, gp_padd);
- }else{
- key_right = keyboard_check(ord("D"));
- key_left = keyboard_check(ord("A"));
- key_up = keyboard_check(ord("W"));
- key_down = keyboard_check(ord("S"));
- }
- // Check if we are moving
- xaxis = key_right - key_left;
- yaxis = key_down - key_up;
- moving = (yaxis != 0);
- if(yaxis == -1 || yaxis == 0) {
- if(key_left) {
- image_angle += turnSpd;
- obj_turm.image_angle += turnSpd;
- } else if(key_right) {
- image_angle -= turnSpd;
- obj_turm.image_angle -= turnSpd;
- }
- }else{
- if(key_left) {
- image_angle -= turnSpd;
- obj_turm.image_angle -= turnSpd;
- } else if(key_right) {
- image_angle += turnSpd;
- obj_turm.image_angle += turnSpd;
- }
- }
- if(moving) {
- // If we are moving
- dir = yaxis
- // Movement
- if(yaxis == -1) {
- // If we are moving forward
- if (len < maxSpd) {
- len += accSpd;
- } else if(len < maxSpd) {
- len = maxSpd;
- }
- } else if(yaxis == 1) {
- // If we are moving backwards
- if(len > -maxReverseSpd) {
- len -= accReverseSpd;
- } else if(len < -maxReverseSpd) {
- len = -maxReverseSpd;
- }
- }
- } else {
- // If we are not moving
- if(dir == -1) {
- // If we are moving forward
- if(len > 0) {
- len -= fricSpd;
- } else if(len <= 0) {
- len = 0;
- }
- } else if(dir == 1) {
- // If we are moving backwards
- if(len < 0) {
- len += fricSpd;
- } else if(len >= 0) {
- len = 0;
- }
- }
- }
- // Calculate where to move
- hspd = lengthdir_x(len , image_angle);
- vspd = lengthdir_y(len , image_angle);
- // Move the car
- x += hspd;
- y += vspd;
- hsp = hspd;
- vsp = vspd;
- if(hsp > 0){
- bbox_side = bbox_right;
- set_spur = true;
- }else{
- bbox_side = bbox_left;
- }
- if(tilemap_get_at_pixel(tilemap,bbox_side + hsp,bbox_top) != 0 || tilemap_get_at_pixel(tilemap,bbox_side + hsp,bbox_bottom) != 0){
- if(hsp > 0){
- x = x - (x mod 16) + 15 - (bbox_right - x);
- }else{
- x = x - (x mod 16) - (bbox_left - x);
- }
- hsp = 0;
- }
- if(vsp > 0){
- bbox_side = bbox_bottom;
- }else{
- bbox_side = bbox_top;
- }
- if(tilemap_get_at_pixel(tilemap,bbox_left,bbox_side + vsp) != 0 || tilemap_get_at_pixel(tilemap,bbox_right,bbox_side + vsp) != 0){
- if(vsp > 0){
- y = y - (y mod 16) + 15 - (bbox_bottom - y);
- }else{
- y = y - (y mod 16) - (bbox_top - y);
- }
- vsp = 0;
- }
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von maclor ()