probleme mit types

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

RealBigDonut

Betreff: probleme mit types

BeitragSo, Jun 06, 2010 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
juten tach

ich beschäftige mich jetzt seit ca. 2 wochen mit blitz basic 2D, hab auch schon ein kleines spielchen programmiert, klappte alles wunderbar.
für mein neustes "projekt" brauche ich typesweil ich eine unbestimmte anzahl autos unabhängig voneinander den bildschirm herunterfahren lassen möchte. ich hab mich hier im forum und in tuts schon schlaugemacht, komm aber trotzdem einfach nicht weiter, und hoffe, ihr könnt mir helfen.
hier der code:

Code: [AUSKLAPPEN]

Graphics 640,475

SeedRnd MilliSecs()

SetBuffer BackBuffer()

Global framerate=CreateTimer(60)

Global player=LoadImage("dings\auto\player.bmp")
Global car=LoadImage("dings\auto\car.bmp")
Global background=LoadImage("dings\auto\background.bmp")
Global life=LoadImage("dings\auto\life.bmp")

Global cartimer=Rand(500,3000)
Global cartime=MilliSecs()
Global start_y=-80
Global max_vel=2

Type tcar
   Field car_x,car_y,car_vel
End Type

startmenu()

Function game()
   cartime=MilliSecs()
   While Not KeyHit(1)
      WaitTimer(framerate)
      create_car()
      update_car()
      Flip
      Cls
   Wend
   endmenu()
End Function
   
Function startmenu()
   Text 320,240,"Mir fällt kein Name ein",True,True
   Text 320,260,"press space",True,True
   Flip
   WaitKey()
   If KeyDown(57)
      Cls
      game()
   EndIf
End Function

Function endmenu()
   While Not KeyDown(1)
      Text 320,240,"GAME OVER",True,True
      Text 320,260,"press esc to exit or space to restart",True,True
      If KeyDown(57)
         Flip
         Cls
         death=0
         game()
      EndIf
      Flip
   Wend
   End
End Function

Function create_car()
   If MilliSecs()>=cartimer+cartime
      
      SeedRnd MilliSecs()
      
      max_vel=max_vel+1
      
      c.tcar=New tcar
      
      c.tcar\car_y=start_y
      c.tcar\car_vel=Rand(2,max_vel)
      position=Rand(1,5)
      
      If position=1
         c.tcar\car_x=80
      EndIf
      If car_position=2
         c.tcar\car_x=180
      EndIf
      If car_position=3
         c.tcar\car_x=280
      EndIf
      If car_position=4
         c.tcar\car_x=380
      EndIf
      If car_position=5
         c.tcar\car_x=490
      EndIf
   
   EndIf
End Function

Function update_car()
   For c.tcar=Each tcar
      c.tcar\car_y=c.tcar\car_y+c.tcar\car_vel
      DrawImage car,c.tcar\car_x,c.tcar\car_y
   Next
End Function


mach ich einen denkfehler oder hab ich mich nur verschrieben? hilfe!

Xeres

Moderator

BeitragSo, Jun 06, 2010 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Um dir helfen zu können, müssen wir erst mal wissen, wo das Problem liegt.
Eine genaue Beschreibung des Problems, was passieren soll und was stattdessen passiert, bitte.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

count-doku

BeitragSo, Jun 06, 2010 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ja eine genauere Beschreibung wäre sinnvoll.

So spontan fällt mir nur das auf:
BlitzBasic: [AUSKLAPPEN]
position=Rand(1,5);Rand die Variable Position

If position=1;Hier heißt es noch Position
c.tcar\car_x=80
EndIf
If car_position=2;Hier heißt es plötzlich car_position???
c.tcar\car_x=180
EndIf
If car_position=3;hier und danach auch.Was ist jetzt richtig?
c.tcar\car_x=280
EndIf
If car_position=4
c.tcar\car_x=380
EndIf
If car_position=5
c.tcar\car_x=490
EndIf


lg,
count-doku

RealBigDonut

BeitragSo, Jun 06, 2010 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
das problem ist folgendes:

die autos bewegen sich nicht auf dem bildschirm verteilt voneinander getrennt nach unten, sondern bewegen sich nur am rechten rand. außerdem bewegen sie sich nicht gleichmäßig, blinken und springen hoch und runter.
das ist die genaueste beschreibung, die ich hinkrieg, es ist auf jeden fall ziemliches chaos

oh verdammt, das hab ich übersehen Embarassed
jetzt sieht man die autos zwar so wie sie sollen herunterfahren, aber im hintergurnd blinken sie immer noch hin und her
  • Zuletzt bearbeitet von RealBigDonut am So, Jun 06, 2010 17:24, insgesamt einmal bearbeitet

count-doku

BeitragSo, Jun 06, 2010 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst du mal das komplette hochladen?
Also mit Bildern usw.

Am besten ins Archiv

Ich sehs mir dann mal durch.

RealBigDonut

BeitragSo, Jun 06, 2010 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
dateien sind hochgeladen, danke schonma im vorraus

count-doku

BeitragSo, Jun 06, 2010 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habs mir jetzt mal angesehen.

Es läuft doch alles richtig.
Das was du als blinken siehst, sind Autos, die gaaanz schnell von oben nach unten rasen.
Du hast zwar einen Timer drin, lässt aber trotzdem noch mit Flip 1 statt Flip 0
auf den internen warten. -> Unötiger Leistungsverlust bzw. hohe CPU Last.

Zudem zählst du max_vel für jedes Auto einen hoch. D.h. die autos werden mit der Zeit immer schneller.

Hier mal ein verbesserter Code, habe veränderte Stellen mit einem Kommentar markiert:
BlitzBasic: [AUSKLAPPEN]
Graphics 640,475,32,2

SeedRnd MilliSecs()

SetBuffer BackBuffer()

Global framerate=CreateTimer(60)

Global player=LoadImage("dings\auto\player.bmp")
Global car=LoadImage("car.bmp")
Global background=LoadImage("dings\auto\background.bmp")
Global life=LoadImage("dings\auto\life.bmp")

Global cartimer=Rand(500,3000)
Global cartime=MilliSecs()
Global start_y=-80
Global max_vel=2

Type tcar
Field car_x,car_y,car_vel
End Type

startmenu()

Function game()
cartime=MilliSecs()
While Not KeyHit(1)
WaitTimer(framerate)
create_car()
update_car()
Flip 0;Flip 0 -> WIr haben ja einen Timer
Cls
Wend
endmenu()
End Function

Function startmenu()
Text 320,240,"Mir fällt kein Name ein",True,True
Text 320,260,"press space",True,True
Flip
WaitKey()
If KeyDown(57)
Cls
game()
EndIf
End Function

Function endmenu()
While Not KeyDown(1)
Text 320,240,"GAME OVER",True,True
Text 320,260,"press esc to exit or space to restart",True,True
If KeyDown(57)
Flip
Cls
death=0
game()
EndIf
Flip
Wend
End
End Function

Function create_car()
If MilliSecs()>=cartimer+cartime

SeedRnd MilliSecs()

max_vel=max_vel+1;Sicher das es immer mehr werden soll?
;Ansonsten einfach mal rauslassen. Und dann probieren.

c.tcar=New tcar

c.tcar\car_y=start_y
c.tcar\car_vel=Rand(2,max_vel);SIcher, dass sich das Auto min. 2Pixel pro Frame bewegen soll?
position=Rand(1,5)

If position=1
c.tcar\car_x=80
EndIf
If position=2
c.tcar\car_x=180
EndIf
If position=3
c.tcar\car_x=280
EndIf
If position=4
c.tcar\car_x=380
EndIf
If position=5
c.tcar\car_x=490
EndIf

EndIf
End Function

Function update_car()
For c.tcar=Each tcar
c.tcar\car_y=c.tcar\car_y+c.tcar\car_vel
DrawImage car,c.tcar\car_x,c.tcar\car_y
Next
End Function


mfg,
count-doku

Badudel

BeitragSo, Jun 06, 2010 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Donut,

ein Link wäre erst einmal sehr hilfreich gewesen...

ALso, bei mir funktioniert alles einwandfrei. Manche sind extrem schnell, das liegt aber an
BlitzBasic: [AUSKLAPPEN]
max_vel=max_vel+1
Vel ist die Geschwindigkeit, und du erhöhst Max_vel bei jedem Auto...
Ein paar kleine Tips habe ich aber noch:

- SeedRnd Millisecs() reicht einmal pro Programm
- Graphics mit krummen Werten im Vollbildmodus gibt auf den meisten Grafikkarten einen Fehler aus
- Wenn du einen Timer benutzt, dann benutze Flip 0
- Bei Types kannst du anstatt

BlitzBasic: [AUSKLAPPEN]
For c.tcar=Each tcar
c.tcar\x
einfach
BlitzBasic: [AUSKLAPPEN]
For c.tcar=Each tcar
tcar\x
schreiben.

Grüße!

EDIT: Zu spät...
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik!
 

n-Halbleiter

BeitragSo, Jun 06, 2010 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Badudel hat Folgendes geschrieben:
BlitzBasic: [AUSKLAPPEN]
For c.tcar=Each tcar
c.tcar\x
einfach
BlitzBasic: [AUSKLAPPEN]
For c.tcar=Each tcar
tcar\x


tcar\x <- Bist du dir da sicher? Wink
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

Badudel

BeitragSo, Jun 06, 2010 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee nich x sondern car_x.. Haarspalterei...
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik!

RealBigDonut

BeitragSo, Jun 06, 2010 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank für die schnelle und zahlreiche hilfe Very Happy
hab das problem mit der gescwindigkeitserhöhung mit ner 2ten "zähler"variable gelöst, außerdem noch den cartimer in die schleife reingepackt, jetzt fahren sie schön gesittet hintereinander

Eingeproggt

BeitragSo, Jun 06, 2010 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich spalte das Haar gleich noch einmal... n-Halbleiter wollte wohl drauf hinweisen dass es so gehört:
Code: [AUSKLAPPEN]
c\car_x

(Ich schreibe dies nur als Korrektur, nicht als Empfehlung - "c" ist ja nun wirklich keine schöne Variablenbezeichnung *hust*)

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

n-Halbleiter

BeitragSo, Jun 06, 2010 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, Eingeproggt, das meinte ich. Ich hätte mich wohl besser ausdrücken sollen. :/

Was ich dir, RealBigDonut, noch ans Herz legen kann (wobei das auch nur Anregungen sind): https://www.blitzforum.de/foru...php?t=1261

Das kann bei der Benennung helfen, genauso wie dir mit Sicherheit später noch IDEal (eine IDE) helfen wird. Die kannst du hier bekommen (die aktuellste Version ist schon etwas älter, aber das macht nichts). Wenn du die nutzt, kannst du sehr viele Fehler schon vom Anfang an vermeiden.
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group