[2D] Schüsse erstellen
Übersicht

![]() |
ToeBBetreff: [2D] Schüsse erstellen |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, da viele immer wieder fragen, wie in 2D Schüsse erstellt werden, hab ich mir überlegt, ein Tutorial darüber zu schreiben.
Also ich ziehe es immer vor, 2D shüsse mit "Types" zu machen, mann kann das auch anders ( glaub ich ![]() 1.: ![]() Code: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer() Type schuss Field x_Pos Field y_Pos Field winkel# End Type Global s.schuss Global x = GraphicsWidth()/2 Global y = GraphicsHeight()/2 So das hätten wir... 2.: ![]() Code: [AUSKLAPPEN] Repeat mx = MouseX() my = MouseY() If KeyDown(200) Then y = y - 5 If KeyDown(208) Then y = y + 5 If KeyDown(203) Then x = x - 5 If KeyDown(205) Then x = x + 5 Color 255,255,255 Oval x-10,y-10,20,20,0 Flip Cls Until KeyHit(1) End so, nun der ganze code bisher : Code: [AUSKLAPPEN] Graphics 800,600,16,2 SetBuffer BackBuffer() Type schuss Field x_Pos Field y_Pos Field winkel# End Type Global s.schuss Global x = GraphicsWidth()/2 Global y = GraphicsHeight()/2 Repeat mx = MouseX() my = MouseY() If KeyDown(200) Then y = y - 5 If KeyDown(208) Then y = y + 5 If KeyDown(203) Then x = x - 5 If KeyDown(205) Then x = x + 5 Color 255,255,255 Oval x-10,y-10,20,20,0 Flip Cls Until KeyHit(1) End 3.: ![]() Code: [AUSKLAPPEN] w# = ATan2(mx-x,my-y)
Line x,y,x+Sin(w#)*50,y+Cos(w#)*50 4.: ![]() Code: [AUSKLAPPEN] If MouseHit(1) Then s = New schuss s\x_Pos = x s\y_Pos = y s\winkel# = w# EndIf 5.: ![]() Code: [AUSKLAPPEN] For s = Each schuss Color 255,0,0 Line s\x_Pos,s\y_Pos,s\x_Pos+Sin(s\winkel#)*10,s\y_Pos+Cos(s\winkel#)*10 s\x_Pos = s\x_Pos + Sin(s\winkel#) * 20 s\y_Pos = s\y_Pos + Cos(s\winkel#) * 20 Color 255,255,255 Next So ! Jetzt ist es fertig ! Noch mal der Zusammengefasste Code: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer() Type schuss Field x_Pos Field y_Pos Field winkel# End Type Global s.schuss Global x = GraphicsWidth()/2 Global y = GraphicsHeight()/2 Repeat mx = MouseX() my = MouseY() If KeyDown(200) Then y = y - 5 If KeyDown(208) Then y = y + 5 If KeyDown(203) Then x = x - 5 If KeyDown(205) Then x = x + 5 Color 255,255,255 Oval x-10,y-10,20,20,0 w# = ATan2(mx-x,my-y) Line x,y,x+Sin(w#)*50,y+Cos(w#)*50 If MouseHit(1) Then s = New schuss s\x_Pos = x s\y_Pos = y s\winkel# = w# EndIf For s = Each schuss Color 255,0,0 Line s\x_Pos,s\y_Pos,s\x_Pos+Sin(s\winkel#)*10,s\y_Pos+Cos(s\winkel#)*10 s\x_Pos = s\x_Pos + Sin(s\winkel#) * 20 s\y_Pos = s\y_Pos + Cos(s\winkel#) * 20 Color 255,255,255 Next Flip Cls Until KeyHit(1) End Bei frage könnt ihr mich gern ansprechen ![]() |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kein wirkliches Tutorial, denn Du klatschst Code hin ohne ihn zu erklären.
Zudem definierst Du in deinem Code Globalen obwohl es nicht nötig wäre, hast keinerlei Kollisionserkennung drin noch sonst eine wirkliche Funktionalität. Daher werde ich den Thread nach Beginners Corner verschieben. Nix für ungut, aber ein gewisser Qualitätsstandard sollte in FAQs und im Codearchiv gelten. Überarbeite das deutlich und man kann über ein einstellen reden. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Ich hab das hier mal so verfolgt. Und als ich das so durchgelsen hab, musste ich mich zurückerinnern wie es bei mir war, als ich die schussfunktion meistern/erlernen wollte. Da hatte ich auch so ein tut wo n paar Anmerkungen mehr nicht schlecht gewesen wären... (auserdem war da noch so anderer schnik schnak mit drinne). Um auf den Punkt zu kommen ich hatte auf einmal dringenst das bedürfniss meiner kreativität fr in Form eines Tutorials freien lauf zu lassen. ![]() Nachdem ich aber nicht unnötig die FAQs und das Codearchiv zu Trashen wollte, dachte ich mir ich füg des erstmal hier rein, um eure Meinung darüber zu hören. (Für die Zeilenumbrüche kann ich nix. In bb schauts normal aus) Code: [AUSKLAPPEN] ;2D - Schusstutorial ;Kurze Übersicht: ;Zu erst definieren wir eingie Variablen. Danach erstellen wir einen Type in dem wir unseren Schuss speichern. ;In der Hauptschleife werden mittels Funktionen die Spielerbewegungen, Tastenabfragen und schließlich auch unser ;Schuss berechnet. Das ganze versuche euch anhand dieses Tutorial bestmöglich und auch gut verständlich zu ;erläutern. ;--------------------------------------------------------------------------------------------- ;was ich Vorraussetzte ; - wie bilder geladen und angezeigt werden ; - wie "Functionen" funktionieren ; - das man zumindest inetwa verstanden hat wie "Types" funktionieren und wie man sie benützt ; - und etwas Zeit ;Was wird benötigt? ;2 Bitmaps (könnt ihr schnell in Paint zusammenbasteln) ; - ein kleines Raumschiff (alles was später nicht zu sehen sein soll hellrosa einfärben) größe ca. 82 x 40 Pixel ; - ein "laserschuss" (einfach bei menü/bild/attribute 5 auf 5 eingeben und alles gelb färben) ;Das Raumschiff als "hero.bmp" bennen ! ;Den Laserschuss als "shot.bmp" bennen ! ;***************************************************************************************************** ;***************************************************************************************************** ;Ok wenn ihr das alles habt wenden wir uns den ersten Schritten unseres tutorials zu: ;grafikmodus (ich denkmal des kennt noch jeder ^^) Graphics 800,600,16 SetBuffer BackBuffer() ;laden wir nun die grafiken(global da wir sie in einer Funktion verwenden wollen) Global Hero = LoadImage("hero.bmp") Global laser = LoadImage("shot.bmp") MaskImage hero,255,0,255 ; so wird des Rosa zeug im Hero bild "unsichtbar" gemacht ;Jezt kurz mal das Progi im gleichen ort wo auch die bilder sich befinden abspeichern. Da er sonst die bilder nicht findet. ;ok jetzt einige Variablen die wir brauchen (und diese als Global da wir sie später in einer funktion verwenden wollen) Global hero_x = 350, hero_y = 500, shot_counter = 0 ; der "shot_counter" dient als timer / Spich die Feuerrate ;Gut. Nun kommt ein Type für den Schuss. In diesem müssen wir die X und Y Koordinate unterbringen. Also : Type shot ;erstellt den Type "shot" Field shot_x ;x Koordinate Field shot_y ;y Koordinate End Type ;Ok jetzt haben wir alles festgelegt was wir für unser "game" brauchen. Ab in die Hauptschleife: ;--------------------------------------------------------------------------- Repeat Cls ;so und ich benutze Funktionen (die nach der Schleife bearbeitet werden / das ist viel viel übersichtlicher :) moveHero() createLaser() Flip Until KeyHit(1) ;ende bei ESC-druck ;---------------------------------------------------------------------------- ;die funktion in der der Spieler / hero bewegt und gezeichnet wird Function moveHero() ;mit Pfeiltasten rechts(203) und links(205) Bewegen If KeyDown(203) Then hero_x = hero_x - 3 If KeyDown(205) Then hero_x = hero_x +3 ;rauf und runter If KeyDown(200) Then hero_Y = hero_y -3 If KeyDown(208) Then hero_y = hero_y +3 ;so und noch den Spieler malen DrawImage hero, hero_x, hero_y End Function ;------------------------------------------------------------------------------------ ;Gut jetzt kommt das Herzstück des tutorials. In der folgenden funktion wird erst ein zähler erhöht und sollte dieser 5 erreichen, wird ;ein neuer Schuss erstellt, welcher sich dan nach oben bewegt. Abschließend wird der zähler wieder auf 0 gesetzt und es geht ;von vorne los. --> ein kreislauf ;wir leiten wieder eine Funktion ein Function createlaser() ;bei Tastendruck (leer) erhöt sich der Zähler If KeyDown(57) Then shot_counter = shot_counter +1 End If ;sollte der Zähler 5 erreicht haben, erstelle einen neuen schuss If shot_counter = 5 Then info.shot = New shot ;hier wird der schuss erstellt info\shot_x = hero_x +5 ;da er ja beim Spieler erstellt werden soll : wird die Schusskoordinate(shot_X) auf hero_x und +5 rüber gelegt info\shot_y = hero_y ;beim Y wert ist es nicht anders, da der Hero ja auch rauf und runter fahren kann shot_counter = 0 ; den Zähler auf 0 damit es wieder von vorne losgehen kann End If ; so nachdem der Schuss/laser erstellt wurde, müssen wir ja sagen das JEDER schuss sich nach oben bewegen soll For info.shot = Each shot ; so wird jeder einzelne Schuss angesprochen info\shot_y = info\shot_y -8 ; die Schüsse werden um -8 nach oben bewegt DrawImage laser,info\shot_x,info\shot_y ; jetzt noch jeden schuss malen Next End Function ;---------------------------------------------------------------------------------------------- Ich hoffe, dass es brauchbar ist. Wenn nicht auch kein Problem ![]() mfg Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group