1 registered members (TipmyPip),
18,449
guests, and 6
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Kollisions abfrage für Panels
#141205
07/15/07 08:08
07/15/07 08:08
|
Joined: Jul 2006
Posts: 26 Germany,Stuttgart
JoeIII
OP
Newbie
|
OP
Newbie
Joined: Jul 2006
Posts: 26
Germany,Stuttgart
|
Hallo zusammen! gibt es eine möglichkeit wenn zwei Panel auf einanderstoßen dies abzufragen?. Ich könnte natürlich die Panel pos vergleichen und entsprechend reagieren aber gibt es noch eine andere möglichkeit. Ziel ist es einen Pong Klon (Atari2600) zu machen d.h. 2D. Bisher hab ich ohne den WED arbeiten können (rein Script). Allerdings stoße ich jetzt immer mehr auf das Problem mit Vectoren arbeiten zu müssen (vermutung) wegen der Kollision. Hier ein Sreenshot vom Game: Grundsätzlich frage ich mich auch ob es Sinnvoll ist das ganze in 2D aufzubauen oder hätte ich das ganze in 3D und dann nur die View entsprechend setzen sollen?. Was meint ihr dazu?. Wäre klasse wenn ihr mir helfen könntet Gruß Jörg
Carpe Diem
|
|
|
Re: Kollisions abfrage für Panels
[Re: aztec]
#141207
07/15/07 20:59
07/15/07 20:59
|
Joined: Oct 2004
Posts: 262 Augsburg,Bayern
ARAS
Member
|
Member
Joined: Oct 2004
Posts: 262
Augsburg,Bayern
|
Hallo JoeIII, mit 3D wirst Du bestimmt soetwas schneller bewerkstelligen können, so wie Du es schon selber gesagt hast. Ich habe Dir einmal so auf die schnelle etwas zusammen geschrieben, damit Du siehst das soetwas in 3D mit Änderung des View garnicht so schlecht aussieht. Hier kannst Du Dir das ganze herunterladen. Ping Pong Ich hoffe das hilft Dir etwas vielleicht doch das ganze im Wed zu machen. Vielen Dank noch einmal an Tracker für sein Packprogramm "3dgsPurePacker". Endlich kann man auf Nacasi verzichten. Sorry, habe Gestern die Steuerung für das Spiel ganz vergessen. Den rechten Paddel kannst Du mit der Maus steuern, den linken mit den Cursortasten und der Ball erscheint wenn Du die linke Maustaste drückst. Wenn der Source Code benötigt wird kann ich den auch hochladen. Mfg ARAS
Last edited by ARAS; 07/16/07 18:21.
|
|
|
Re: Kollisions abfrage für Panels
[Re: ARAS]
#141208
07/15/07 22:16
07/15/07 22:16
|
Joined: Jul 2007
Posts: 959 nl
flits
User
|
User
Joined: Jul 2007
Posts: 959
nl
|
hallo
ich habbe auch was geschreben ess ist still under construction but its realy late here and.
i hoffe das do weiter geht am 2d
place othere names for bmap and it will work i hope;
var video_mode = 7; var video_depth = 32; var video_screen = 1; var screen_color[3] = 0,0,1; var movebalkl; var movebalkr; var movebalx; var movebaly; var oldspeedx = 1; var oldspeedy = 1; var speedx; var speedy; var scorer; var scorel;
bmap balk1 = ("balk1.bmp"); // 20 x 100 pixels bmap bal_bmp = ("bal.bmp"); // 18 x 18 pixels
panel balkl { bMAP = balk1; layer = 2; }
panel balkr { bMAP = balk1; layer = 2; }
panel bal { bmap = bal_bmp; layer = 2; }
panel scores { digits = 395,0,2,_a4font,1,scorer; digits = 405,0,2,_a4font,1,scorel; layer = 3; flags = visible; }
function startpos { bal.visible = on; balkl.visible = on; balkr.visible = on; balkl.pos_x = 0; balkr.pos_x = screen_size -20; movebalkl = 250; movebalkr = 250; bal.pos_x = 400 - 9; bal.pos_y = 300 - 9; }
function bal_func { movebalx =1; while(1) { if(bal.pos_y <= 0) { movebaly += -oldspeedy; } if(bal.pos_y >= 588) { movebaly -= -oldspeedy*2; } if(bal.pos_x <= 0) { scorer +=1; startpos(); } if(bal.pos_x >= 788) { scorel +=1; startpos(); } if(bal.pos_y >= balkl.pos_y -18 && bal.pos_y <= balkl.pos_y + 118 && bal.pos_x <= 20) { movebalx += -oldspeedx; } if(bal.pos_y >= balkl.pos_y -18 && bal.pos_y <= balkl.pos_y + 118 && bal.pos_x >= 762) { movebalx -= -oldspeedx; } bal.pos_x -= movebalx; bal.pos_y -= movebaly; wait(1); } }
function move_balks { while(1) { movebalkl -= (key_w - key_s)*2; movebalkl = clamp(movebalkl,0,500); movebalkr -= (key_cuu - key_cud)*2; movebalkr = clamp(movebalkr,0,500); balkl.pos_y = movebalkl; balkr.pos_y = movebalkr; wait(1); } }
function main() { wait(1); startpos(); move_balks(); bal_func(); }
"empty"
|
|
|
Re: Kollisions abfrage für Panels
[Re: flits]
#141209
07/17/07 19:41
07/17/07 19:41
|
Joined: Oct 2004
Posts: 262 Augsburg,Bayern
ARAS
Member
|
Member
Joined: Oct 2004
Posts: 262
Augsburg,Bayern
|
Hallo JoeIII, hier wie gewünscht erst einmal der Source-Code zum herunterladen. PING_PONG_SOURCEUnd hier das Skript das Du noch wolltest. Code:
//////////////////////////////////////////////////////////////////////////////
PATH "sprites"; PATH "scripts"; PATH "models"; PATH "levels"; PATH "sounds";
var video_mode = 8; // 1024 x 768 pixels var video_depth = 32; // 32 bit mode var video_screen = 1; // full screen mode var d3d_lightres = 1;
var ball_speed = 60; var treffer_spieler_1 = 0; var treffer_spieler_2 = 0; var level_number = 1; var ball_pos; var ball_pan;
//////////////////////////////////////////////////////////////////////////////
font ping_pong1_font = <ping_pong1.pcx>, 25, 19;
//////////////////////////////////////////////////////////////////////////////
string level_wmb = <level.wmb>; string ball_mdl = <ball.mdl>;
//////////////////////////////////////////////////////////////////////////////
sound wall_wav = <wall.wav>; sound lost_wav = <lost.wav>;
//////////////////////////////////////////////////////////////////////////////
entity* ball; entity* player1; entity* player2;
//////////////////////////////////////////////////////////////////////////////
function balltreffer(); function ball_event();
//////////////////////////////////////////////////////////////////////////////
panel pingpong_pan { layer = 15; digits = 150, 15, 6, ping_pong1_font, 1, treffer_spieler_1; digits = 605, 15, 6, ping_pong1_font, 1, treffer_spieler_2; flags = overlay, refresh, visible; }
text pingpong_txt { layer = 15; pos_x = 5; pos_y = 15; font = ping_pong1_font; flags = visible; }
//////////////////////////////////////////////////////////////////////////////
function main() { fps_max = 100; if (level_number == 1) { level_load(level_wmb); } wait (3); camera.z = 2000; // Kamerahöhe camera.x = 0; camera.y = 0; camera.pan = -90; camera.tilt = -90; while (player1 == null || player2 == null) {wait (1);} // Keine Spielerentity ist vorhanden, dann stoppt das Spiel while (ball == null) {wait (1);} // Keine Ball ist vorhanden, dann stoppt das Spiel ball.invisible = off; ball_speed = 60; // Ballgeschwindigkeit }
action my_paddle_1 { player1 = my; my.transparent = on; my.alpha = 100; my.enable_impact = on; my.enable_entity = on; my.event = balltreffer; while (1) { ent_move(nullvector, vector(0, -90 * mouse_force.y * time, 0)); wait (1); } }
action my_paddle_2 { player2 = my; my.transparent = on; my.alpha = 100; my.enable_impact = on; my.enable_entity = on; my.event = balltreffer; while (1) { ent_move(nullvector, vector(0, -80 * (key_cuu - key_cud) * time, 0)); wait (1); } }
function balltreffer() { proc_kill(4); snd_play (wall_wav, 50, 0); my.event = null; sleep (0.5); my.event = balltreffer; }
action my_ball { vec_set (ball_pos.x, my.x); my.invisible = on; while (mouse_left == 0) {wait (1);} ball_speed = 60; my.invisible = off; randomize(); ball = my; my.pan = 70 - random(140); my.enable_block = on; my.enable_impact = on; my.enable_entity = on; my.event = ball_event; while(1) { ball_pan = my.pan; move_mode = ignore_passable; ent_move(vector(ball_speed * time, 0, 0), nullvector); if (my.x < -1024 || my.x > 1024) // Grenzen für Ball im Aus { snd_play (lost_wav, 70, 0); if (my.x < -1024) { treffer_spieler_1 += 1; // Erhöhung der Trefferpunkte } if (my.x > 1024) { treffer_spieler_2 += 1; // Erhöhung der Trefferpunkte } ent_create (ball_mdl, ball_pos.x, my_ball); // Ball wird am Anfangspunkt wieder kreiert ent_remove (my); return; } wait(1); } }
function ball_event() // Eventfunktionen des Balles { if (event_type == event_block) // Auftreffen des Balles auf Wände { snd_play (wall_wav, 50, 0); } vec_to_angle (my.pan, bounce); if(ball_speed < 120) // Stetige Erhöhung der Ballgeschwindigkeit { ball_speed += 1; } my.tilt = 0; // Keine horizontale Bewegung zulassen. if ((my.pan > -80) && (my.pan < -100)) // Reduzierung von zu geradlinigem Abprallen von der Wand { if (my.pan > -90) { my.pan = -80; } else { my.pan = -100; } } if ((my.pan > 80) && (my.pan < 100)) // Reduzierung von zu geradlinigem Abprallen von der Wand { if (my.pan < 90) { my.pan = 80; } else { my.pan = 100; } } my.pan += 1 - random(2); // Zufällige Erhöhung der Pan-Wertes um gleichbleibende Bewegung zu verhindern }
MFG ARAS
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|