feuern mit sincosi

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

silent_source

Betreff: feuern mit sincosi

BeitragDo, Jun 15, 2006 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jun 15, 2006 1:16
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi,

erstmal ist nen schreibfehler drin (laeser_laenge), und setz mal die variable laser_laenge auf 500, dann siehste wo der fehler liegt Wink

l8er,
psy
 

silent_source

BeitragDo, Jun 15, 2006 2:00
Antworten mit Zitat
Benutzer-Profile anzeigen
danke dir funkt jetzt Smile

das mit der schreibweise hätte ich wohl bemerken sollen Embarassed

aber ich bin gewohnt das der bei unbekannten variablen fehlermeldungen ausgibt...

also war der strich unter dem raumschiff? Idea

ich verstehe den cosinus sinus teil nämlich nicht wirklich ...
 

Steve0

BeitragDo, Jun 15, 2006 10:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jun 15, 2006 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jun 15, 2006 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jun 15, 2006 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
silent_source hat Folgendes geschrieben:


aber ich bin gewohnt das der bei unbekannten variablen fehlermeldungen ausgibt...

also war der strich unter dem raumschiff? Idea



ja das mit den variablen kann nerven Confused gibts eigentlich keine möglichkeit, variablendeklarationen zu erzwingen? sowas wie option explicit in VB z.b....

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 Wink


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 Wink

cos und sin werden in deinem code übrigens korrekt benutzt Idea

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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group