Posted By: DexLoomer
Ballistische Flugbahn - 06/28/15 13:07
Hallo Leute,
ich möchte für ein Panzerspiel eine einigermaßen spieltaugliche ballistische Flugbahn des Geschosses haben. Mein Problem ist, das ich die mathematischen Formeln die ich bislang gefunden habe, nicht in Programmcode umgesetzt bekomme.
Deshalb fliegt mein Geschoss bislang nur gerade und wird nach einer gewissen Strecke auch nach unten bewegt. Das ähnelt aber zu wenig einer echten Flugbahn.
Außerdem benutze ich als Geschoss eine Entity, welche wegen der hohen Geschwindigkeit durch kleinere Objekte "durchfliegt". Daher habe ich wischen den c_move Schritten noch eine c_trace mit event gesetzt. Hat jemand eine Idee, wie man eine simple ballistische Flugbahn einbauen könnte?
ich möchte für ein Panzerspiel eine einigermaßen spieltaugliche ballistische Flugbahn des Geschosses haben. Mein Problem ist, das ich die mathematischen Formeln die ich bislang gefunden habe, nicht in Programmcode umgesetzt bekomme.
Deshalb fliegt mein Geschoss bislang nur gerade und wird nach einer gewissen Strecke auch nach unten bewegt. Das ähnelt aber zu wenig einer echten Flugbahn.
Außerdem benutze ich als Geschoss eine Entity, welche wegen der hohen Geschwindigkeit durch kleinere Objekte "durchfliegt". Daher habe ich wischen den c_move Schritten noch eine c_trace mit event gesetzt. Hat jemand eine Idee, wie man eine simple ballistische Flugbahn einbauen könnte?
Code:
function move_rocket() { set (my, PASSABLE); // don't collide with the player VECTOR rocket_speed; VECTOR rocket_pos; VECTOR rocket_posold; vec_set(rocket_posold.x, my.x); // Startposition der Rakete merken my.pan = entBarrel.pan; my.tilt = entBarrel.tilt; wait (1); my.emask |= (ENABLE_ENTITY|ENABLE_IMPACT|ENABLE_BLOCK); my.event = remove_rocket; my.skill40 = 1234; // I'm a rocket my.skill20 = 0; my.skill5 = 0; // used for vertical movement while (my.skill20 < 10) { if (my.skill20 > 2) // the rocket has moved away from the player? Then let's reset its passable flag reset (my, PASSABLE); effect (rocket_trail, 1, my.x, normal); // generate particle trails for the rocket // my.roll += 20 * time_step; rocket_speed.x = 300 * time_step; rocket_speed.y = 0; rocket_speed.z = 0; my.skill5 += time_step; if (my.skill5 > 5) { rocket_speed.z -= fall_speed * time_step; } my.skill20 += 1 * time_step; c_move (my, rocket_speed, nullvector, IGNORE_PASSABLE); vec_set(rocket_pos.x, my.x); // Momentane Position der Rakete merken c_trace(rocket_posold.x,rocket_pos.x,IGNORE_ME|IGNORE_PASSABLE|ACTIVATE_SHOOT|IGNORE_CONTENT); //draw_line3d(rocket_posold.x,NULL,100); // draw line for debug //draw_line3d(rocket_pos.x,vector(0,0,255),100); vec_set(rocket_posold.x,rocket_pos.x); // Alte Position merken wait (1); } remove_rocket(); }