feuern mit sincosi
Übersicht

silent_sourceBetreff: feuern mit sincosi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi
kann sich vielleicht jemand von euch vorstellen warum dieser code hier nicht funktioniert? Das Programm läuft bestens nur das die Linie nicht gezeichnet wird. Ich hab den codeteil für die Linie rot markiert. const grafik_breite= 1280 const grafik_hoehe = 1024 ; tastaturcodes const pfeil_oben=200 const pfeil_unten=208 const return_taste=28 const esc=1 Graphics grafik_breite,grafik_hoehe Global raumschiffx#, raumschiffy# , raumschiffbreite, raumschiffhoehe,speed#,winkel ;raumschiff speed# = 0 raumschiffx#=640 raumschiffy#=512 raumschiffbreite=30 raumschiffhoehe=15 ;laser laserx#=0 lasery#=0 laser_laenge=5 raumschiff=CreateImage(raumschiffbreite,raumschiffhoehe) midhandle(raumschiff) SetBuffer ImageBuffer(raumschiff) Color 0,0,255 Oval 0,0,raumschiffbreite,raumschiffhoehe,1 ; für 360 grad steuerung 360 bilder erzeugen dim raumschiffe(360) for i = 1 to 360 raumschiffe(i)=copyimage(raumschiff) rotateimage raumschiffe(i),i next Repeat cls speed#=0 ;damit das raumschiff stehen bleibt sobalt man keine taste mehr drückt ; Tasten abfragen If KeyDown(203) Then winkel = winkel - 3 If KeyDown(205) Then winkel = winkel + 3 If KeyDown(pfeil_oben) Then speed# = 5 If KeyDown(pfeil_unten) Then speed# = speed# - 3 ; Damit der Winkel nicht über 360 oder unter 0 geht. If winkel > 360 Then winkel = 1 If winkel < 1 Then winkel = 360 ; Position entsprechend dem Winkel verändern. raumschiffx# = raumschiffx# + (Cos(winkel)*speed#) raumschiffy# = raumschiffy# + (Sin(winkel)*speed#) raumschiff=CreateImage(raumschiffbreite,raumschiffhoehe) midhandle(raumschiff) SetBuffer ImageBuffer(raumschiff) Color 0,0,255 Oval 0,0,raumschiffbreite,raumschiffhoehe,1 wandlinks=CreateImage(20,grafik_hoehe) SetBuffer ImageBuffer(wandlinks) Color 0,0,255 rect 0,0,20,grafik_hoehe,1 wandoben=CreateImage(grafik_breite,20) SetBuffer ImageBuffer(wandoben) Color 0,0,255 rect 0,0,grafik_breite,20,1 wandunten=CreateImage(grafik_breite,20) SetBuffer ImageBuffer(wandunten) Color 0,0,255 rect 0,0,grafik_breite,20,1 wandrechts=createimage(20,grafik_hoehe) SetBuffer ImageBuffer(wandrechts) Color 0,0,255 rect 0,0,20,grafik_hoehe,1 ; alles zeichnen setbuffer backbuffer() DrawImage raumschiffe(winkel),raumschiffx#,raumschiffy# drawimage wandlinks ,0,0 drawimage wandoben ,0,0 drawimage wandunten ,0,grafik_hoehe-20 drawimage wandrechts ,grafik_breite-20,0 Color 0,0,255 line raumschiffx#,raumschiffy#,raumschiffx# + (Cos(winkel)*laser_laenge),raumschiffy# + (Sin(winkel)*laeser_laenge) flip ;kollisionserkennung raumschiff oben If Imagescollide (raumschiff, raumschiffx#, raumschiffy#,0,wandoben,0,0,0) raumschiffy# = raumschiffbreite/2 + 30 EndIf ;kollisionserkennung unten If Imagescollide (raumschiff, raumschiffx#, raumschiffy#,0,wandunten,0,grafik_hoehe-20,0) raumschiffy# = grafik_hoehe -30 - raumschiffbreite/2 EndIf ;kollisionsabfrage links If Imagescollide (raumschiff, raumschiffx#, raumschiffy#,0,wandlinks,0,0,0) raumschiffx# = 30 + raumschiffbreite/2 EndIf ;kollisionsabfrage rechts If Imagescollide (raumschiff, raumschiffx#, raumschiffy#,0,wandrechts,grafik_breite-20,0,0) raumschiffx# = grafik_breite - 30 - raumschiffbreite/2 EndIf freeimage wandlinks freeimage wandoben freeimage wandunten freeimage wandrechts freeimage raumschiff Until KeyHit(1) freeimage raumschiff freeimage wandlinks freeimage wandoben freeimage wandunten freeimage wandrechts for i = 1 to 360 freeimage raumschiffe(i) next End |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
hoi,
erstmal ist nen schreibfehler drin (laeser_laenge), und setz mal die variable laser_laenge auf 500, dann siehste wo der fehler liegt ![]() l8er, psy |
||
silent_source |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke dir funkt jetzt ![]() das mit der schreibweise hätte ich wohl bemerken sollen ![]() aber ich bin gewohnt das der bei unbekannten variablen fehlermeldungen ausgibt... also war der strich unter dem raumschiff? ![]() ich verstehe den cosinus sinus teil nämlich nicht wirklich ... |
||
Steve0 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das mit dem Sinus und Cosinus (und Tangens) war bei mir auch so aber nachdem wir das in der Schule gemacht habe war alles ganz einfach.
Also musstes nur abwarten. (Falls du schon aus der Schule bist und das nicht verstanden hast war meine Antwort natürlich ganz fehl am Platz. In dem Fall: Einfach nicht beachten) |
||
Pixelgenaue 2D SingleSurface Engine!!! |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hat zwar nix mit dem Thema zu tun, aber benutz doch bitte Code-Tags!
Bei solchen einfach kopierten Codes geht a) die Einrückung flöten und b) wird alles recht unübersichtlich. Ich neige dann oft dazu, nichtmal zu versuchen mich in den Code einzulesen, weil es einfach nur wüst ist. Mfg |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
würd sagen du musst entweder bei sin oder bei cos -winkel nehmen... kommt auf deine steuerrichtung an.
MfG 5k41 |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
silent_source hat Folgendes geschrieben: aber ich bin gewohnt das der bei unbekannten variablen fehlermeldungen ausgibt... also war der strich unter dem raumschiff? ![]() ja das mit den variablen kann nerven ![]() der strich war einfach zu kurz, du hast gerade mal 5 pixel von der mitte deines raumschiffes gezeichnet, d.h. der laserstrahl kommt nichtmal über den rand des schiffes ![]() ausserdem: du erstellst permanent in der hauptschleife images und löschst sie wieder. sowas macht man prinzipiell immer ausserhalb der hauptschleife EINMAL! dein programm wird irgendwann wegen nem überlauf abfackeln. hier mal ne verbesserte version: zum vergleich: mit flip 0 hat deine version ca. 250fps, diese hier 850 rum. also nochmal: nie während der hauptschleife images laden bzw. erstellen ![]() cos und sin werden in deinem code übrigens korrekt benutzt ![]() Code: [AUSKLAPPEN] const grafik_breite= 1280 const grafik_hoehe = 1024 ; tastaturcodes const pfeil_oben=200 const pfeil_unten=208 const return_taste=28 Const esc=1 Graphics grafik_breite,grafik_hoehe Global raumschiffx#, raumschiffy# , raumschiffbreite, raumschiffhoehe,speed#,winkel ;raumschiff speed# = 0 raumschiffx#=640 raumschiffy#=512 raumschiffbreite=30 raumschiffhoehe=15 ;laser laserx#=0 lasery#=0 laser_laenge=50 Color 0,0,255 raumschiff=CreateImage(raumschiffbreite,raumschiffhoehe) midhandle(raumschiff) SetBuffer ImageBuffer(raumschiff) Oval 0,0,raumschiffbreite,raumschiffhoehe,1 wandlinks=CreateImage(20,grafik_hoehe) SetBuffer ImageBuffer(wandlinks) Rect 0,0,20,grafik_hoehe,1 wandoben=CreateImage(grafik_breite,20) SetBuffer ImageBuffer(wandoben) Rect 0,0,grafik_breite,20,1 wandunten=CreateImage(grafik_breite,20) SetBuffer ImageBuffer(wandunten) Rect 0,0,grafik_breite,20,1 wandrechts=createimage(20,grafik_hoehe) SetBuffer ImageBuffer(wandrechts) Rect 0,0,20,grafik_hoehe,1 SetBuffer BackBuffer() ; für 360 grad steuerung 360 bilder erzeugen dim raumschiffe(360) for i = 1 to 360 raumschiffe(i)=copyimage(raumschiff) rotateimage raumschiffe(i),i next Repeat cls speed#=0 ;damit das raumschiff stehen bleibt sobalt man keine taste mehr drückt ; Tasten abfragen If KeyDown(203) Then winkel = winkel - 3 Mod 360 If KeyDown(205) Then winkel = winkel + 3 Mod 360 If KeyDown(pfeil_oben) Then speed# = 5 If KeyDown(pfeil_unten) Then speed# = speed# - 3 ; Damit der Winkel nicht über 360 oder unter 0 geht. If winkel > 360 Then winkel = 1 If winkel < 1 Then winkel = 360 ; Position entsprechend dem Winkel verändern. raumschiffx# = raumschiffx# + (Cos(winkel)*speed#) raumschiffy# = raumschiffy# + (Sin(winkel)*speed#) ; alles zeichnen drawImage raumschiffe(winkel),raumschiffx#,raumschiffy# drawimage wandlinks ,0,0 drawimage wandoben ,0,0 drawimage wandunten ,0,grafik_hoehe-20 drawImage wandrechts ,grafik_breite-20,0 line raumschiffx#,raumschiffy#,raumschiffx# + (Cos(winkel)*laser_laenge),raumschiffy# + (Sin(winkel)*laser_laenge) Flip 0 ;kollisionserkennung raumschiff oben If Imagescollide (raumschiff, raumschiffx#, raumschiffy#,0,wandoben,0,0,0) Then raumschiffy# = raumschiffbreite/2 + 30 ;kollisionserkennung unten If Imagescollide (raumschiff, raumschiffx#, raumschiffy#,0,wandunten,0,grafik_hoehe-20,0) Then raumschiffy# = grafik_hoehe -30 - raumschiffbreite/2 ;kollisionsabfrage links If Imagescollide (raumschiff, raumschiffx#, raumschiffy#,0,wandlinks,0,0,0) Then raumschiffx# = 30 + raumschiffbreite/2 ;kollisionsabfrage rechts If Imagescollide (raumschiff, raumschiffx#, raumschiffy#,0,wandrechts,grafik_breite-20,0,0) Then raumschiffx# = grafik_breite - 30 - raumschiffbreite/2 Until KeyHit(1) freeimage raumschiff freeimage wandlinks freeimage wandoben freeimage wandunten freeimage wandrechts for i = 1 to 360 freeimage raumschiffe(i) next End grüsse, psy |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group