Wie verwendet man ein DimFeld,in das RnD gezeichent wird?EDI
Übersicht

![]() |
ReLeNtLeSSBetreff: Wie verwendet man ein DimFeld,in das RnD gezeichent wird?EDI |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heyho,
ich stehe hier vor einem größeren Problem. Ich will, das auf meine Spieler (ein auto) mehrere autos vom oberen bildschirm zufahren, die werden random am anfang vom bild gespawnt. so jetz habe ich mir gedacht, mach ich doch ein dim feld, in dem die autos gespawnt werden. allerdings, wie picke ich mir jetz die einzelnen autos raus und sage ihnen, das sie nach unten fahren sollen? Code: [AUSKLAPPEN] ;Race AppTitle "Race!" Graphics 1280,1024 SetBuffer BackBuffer() ;LoadImage;Loadsound Global auto=LoadImage("auto.bmp") Global autoruck=LoadImage("autoruck.bmp") Global crash=LoadImage("crash.bmp") MaskImage auto,255,0,0 MaskImage autoruck,255,0,0 MaskImage crash,255,0,0 ;Benötigte festgelegte Zustaende und Vars Global y1=100 Global y11=400 Global y21=700 Global autox=750 Global autoy=950 Global autoruck_y=0 Dim autos$(3) ;Hautpschleife Repeat Text 0,0,"Pos. Auto: X: "+autox+" Y: "+autoy auto() strasse() andere_autos() kollisionen() Flip Cls Until KeyHit(1) ;Functions Function menu() End Function ;__________________ Function strasse() Rect 650,y1,3,100,1 Rect 650,y11,3,100,1 Rect 650,y21,3,100,1 Rect 400,0,1,1024 Rect 900,0,1,1024 y1=y1+2 y11=y11+2 y21=y21+2 If y1=1024 Then y1=0 If y11=1024 Then y11=0 If y21=1024 Then y21=0 End Function ;________________ Function auto() DrawImage auto,autox,autoy If KeyDown(205)=1 Then autox=autox+4 If KeyDown(203)=1 Then autox=autox-4 If autox<402 Then autox=402 If autox>862 Then autox=862 End Function ;______________________ Function andere_autos() For i=1 To 3 autos$(i)=1 Next If autos$(i)=1 Then DrawImage(autoruck,Rand(402,862),Rand(0,0)) EndIf autoruck_y=autoruck_y+2 If autoruck_y=1024 Then autoruck_y=0 End Function ;__________________ Function kollisionen() If ImagesOverlap(auto,autox,autoy,autoruck,autoruck_x,autoruck_y) Then Cls DrawImage crash,450,450 Text 450,450,"You FAIL!" Text 700,450,"Restart? 1=Yes 2=No" If KeyDown(2)=1 Then Text 0,15,"Restart" If KeyDown(3)=1 Then End WaitKey() EndIf End Function Ich weis nich, wie ich das Dim-Feld richig verwende, habe dazu nirgends was gefunden.... (OH, Boardsuche und BBKurs) MfG P.S.: Über die Variable autoruck_y einfach mal drüber hinweg sehn, das war für mein testauto das nach unten fuhr^^ |
||
- Zuletzt bearbeitet von ReLeNtLeSS am Do, Okt 18, 2007 20:21, insgesamt einmal bearbeitet
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für das was du da machen willst, sind types vll besser geeignet.
Code: [AUSKLAPPEN] ;type erstellen info.auto = new auto info\car_x = rnd(0,800) info\car_y = -20 ;auser sichtweite Dan brauchste noch sowas wie: Code: [AUSKLAPPEN] for info.auto = each auto info\car_y = info\car_y + 2 drawimage auto,info\car_x,info\car_y next Mit arrys oh gott ^^ da müsste ich jetzt scho grübeln. mfg Dottakopf |
||
![]() |
ReLeNtLeSS |
![]() Antworten mit Zitat ![]() |
---|---|---|
omg, ich hab gedacht wenn ich mich mit dem DIM feldern beschäftige reicht das
wenn du jetz schon nachdenken musst, was soll ich dann erst tuen ![]() |
||
![]() |
ReLeNtLeSS |
![]() Antworten mit Zitat ![]() |
---|---|---|
so ich hab jetz den code editiert, aber meine kollisionsabfrage und das zurücksetzten funzt nimmer.....
Code: [AUSKLAPPEN] ;ForSoRace
AppTitle "ForSoRace!" Graphics 1280,1024 SetBuffer BackBuffer() ;LoadImage;Loadsound Global auto=LoadImage("auto.bmp") Global autoruck=LoadImage("autoruck.bmp") Global crash=LoadImage("crash.bmp") MaskImage auto,255,0,0 MaskImage autoruck,255,0,0 MaskImage crash,255,0,0 ;Benötigte festgelegte Zustaende und Vars Global y1=100 Global y11=400 Global y21=700 Global autox=750 Global autoy=950 ;Types Type auto Field car_x Field car_y End Type info.auto = New auto info\car_x = Rnd(402,862) info\car_y = -100 info.auto = New auto info\car_x = Rnd(402,862) info\car_y = -20 info.auto = New auto info\car_x = Rnd(402,862) info\car_y = -60 ;Hautpschleife Repeat Text 0,0,"Pos. Auto: X: "+autox+" Y: "+autoy Text 0,15,"Pos. Andere Autos: X: "+info\car_x+" Y: "+info\car_y auto() strasse() andere_autos() kollisionen() Flip Cls Until KeyHit(1) ;Functions Function menu() End Function ;__________________ Function strasse() Rect 650,y1,3,100,1 Rect 650,y11,3,100,1 Rect 650,y21,3,100,1 Rect 400,0,1,1024 Rect 900,0,1,1024 y1=y1+2 y11=y11+2 y21=y21+2 If y1=1024 Then y1=0 If y11=1024 Then y11=0 If y21=1024 Then y21=0 End Function ;________________ Function auto() DrawImage auto,autox,autoy If KeyDown(205)=1 Then autox=autox+4 If KeyDown(203)=1 Then autox=autox-4 If autox<402 Then autox=402 If autox>862 Then autox=862 End Function ;______________________ Function andere_autos() for info.auto = each auto info\car_y = info\car_y + 2 DrawImage autoruck,info\car_x,info\car_y Next If info\car_y=1024 Then info\car_y=0 End Function ;__________________ Function kollisionen() If ImagesOverlap(auto,autox,autoy,autoruck,car_x,car_y) Then Cls DrawImage crash,450,450 Text 450,450,"You FAIL!" Text 700,450,"Restart? 1=Yes 2=No" If KeyDown(2)=1 Then Text 0,15,"Restart" If KeyDown(3)=1 Then End WaitKey() EndIf End Function |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte keine Doppelpostings. Danke.
Du kannst das auch mit Dim allein erledigen. Code: [AUSKLAPPEN] dim auto(20,1) ;Platz für 21 Autokoordinaten
in auto(xyz,0) kommen die X-Koordinaten des jeweiligen autos, in auto(xyz,1) die y-Koord. nun kannst Du in deiner Hauptschleife die y-Koord jedes Autos um einen festen Wert erhöhen bis sie einen Höchstwert überschreiten (aus dem Bildschirm sind). Dann y wieder <0 setzen und ein neues x vergeben, damit die Autos nicht immer an der selben stelle ins Bild kopmmen. C'est ca. |
||
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 |
![]() |
ReLeNtLeSS |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke werde ich mal probieren ![]() edit: autos(von xwert dingens bis xwet dinges,0) wie mach ich das? edit2: nunja... Code: [AUSKLAPPEN] ;Dim
Dim autos(20,1) autos(402,0) autos(car_y,1) Code: [AUSKLAPPEN] Function andere_autos() car_y=car_y+2 If car_y>1024 Then car_y=-20 End Function BB startet das proggi nich (?) |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch nix mit types gemacht ?
Types funtzen im groben in etwa so: ;type deklarieren (eigenschaften zuweisen usw) ausserhalb von schleifen ! ;den type erstellen ;den type was machen lassen ;type stuff: welches du nimmst ist dir überlassen. typ tut https://www.blitzforum.de/foru...hp?t=25321 type kompakt OH http://www.blitzbase.de/tutorials/shadow_2.htm type robsite (bischen scrollen) http://www.robsite.de/suche.php Zu deinem Problem(types): nein blade ich arbeite nicht gegen deinen vorschlag. Wenn du typ kollisonen abfragen willst, muss du das natürlich auch schreiben, bzw den typ ansprechen. Code: [AUSKLAPPEN] funciton colli() for info.auto = each auto if imagescollide(player,px,py,0, auto_bild , info\car_x, info\car_y , 0 ) then blubber end if end function Merke dir: Wenn du irgendwas mit einem type machen willst brauchst du immer die for bla.lol = each lol schleife ! Das erstellen kann man vereinfachen. Stell dir mal vor du lässt 200 gegner autos kommen. Machst du dan diesen block 200 mal ? Code: [AUSKLAPPEN] info.auto = New auto info\car_x = Rnd(402,862) info\car_y = -100 Natürlich ist das dan quatsch. Du baust einfach eine schleife ein, die die autos genau 200 mal erstellt. Code: [AUSKLAPPEN] for x = 0 to 199 info.auto = new auto info\car_x = rnd(0,800) usw.. next Zack peng.. so wurden 200 autos erstellt. jetzt gibst nur ein problem... Die sind alle auf einmal erstellt worden, was zur folge hat, dass plötzlich 200 autos gleichzeitig auf dich zurasen. Statt das immer mal wieder eins kommt bis 200 autos durchgefahren sind. Wenn du sowas willst, muss du bb sagen wann er ein auto erstellen soll. Also wenn zb ein counter 50 erreicht, soll ein auto erstellt werden und soll auf dich zufahren. Das sieht dan so aus und muss natürlcih in der main-loop geschehen. Code: [AUSKLAPPEN] function create_autos() counter = counter +1 if counter >= 50 then ;bestimmt wan bb ein auto erstellt counter = 0 info.auto = new auto ;auto erstellen info\car_x = rnd(0,800) info\car_y = -20 end if end function So damit du jezt nicht durcheinander kommst, sage ich dir noch wie das alles in etwa in deinem code aufgebaut sein sollte. Code: [AUSKLAPPEN] n paar varriablen type festlegen (type auto) repeat cls create_autos() update_autos() ;bewegt die autos nach unten update_spieler() ;alles was mit dem spieler zu tun hat kollisionen() ;hier kommt die kollison ( spieler / type ) flip until keyhit(1) Hoffentlich war des nachvollziehbar. Du kannst aber auch Bladerunners weg einschlagen, beides das gleiche mfg Dottakopf |
||
![]() |
ReLeNtLeSS |
![]() Antworten mit Zitat ![]() |
---|---|---|
vielen dank dotterkopf!
das nenne ich mal ausführlich und hilfreich, danke!! ![]() ich mach das mit den types un nem timer, dann ist es auh leichter festzulegen, wann die level enden oder die punktzahl zu summieren ![]() nochmal danke! MfG |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;Dim
Dim autos(20,1) autos(402,0) autos(car_y,1) Das kann nicht funktionieren. Du dimensionierst für 21 (0-20) Autos aber rufst dann Auto Nummer 403 ab. Diese Zahlen sind Indizes auf die Koordinaten, nicht die Koordinaten selbst. siehe ql:dim |
||
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 |
![]() |
ReLeNtLeSS |
![]() Antworten mit Zitat ![]() |
---|---|---|
zu Dim:
achso.... gut weis ich jetz auch bescheit! ![]() /EDIT: Habe die Types (meines Erachtens nach) richtig eingebaut, aber es erscheinen keine Autos ![]() Code: [AUSKLAPPEN] ;ForSoRace
AppTitle "ForSoRace!" Graphics 1280,1024 SetBuffer BackBuffer() ;LoadImage;Loadsound Global auto=LoadImage("auto.bmp") Global autoruck=LoadImage("autoruck.bmp") Global crash=LoadImage("crash.bmp") MaskImage auto,255,0,0 MaskImage autoruck,255,0,0 MaskImage crash,255,0,0 ;Benötigte festgelegte Zustaende und Vars Global y1=100 Global y11=400 Global y21=700 Global autox=750 Global autoy=950 ;Types Type auto Field car_x Field car_y End Type ;Hautpschleife Repeat Text 0,0,"Pos. Auto: X: "+autox+" Y: "+autoy auto() strasse() create_autos() autos_bewegen() kollisionen() Flip Cls Until KeyHit(1) ;Functions Function menu() End Function ;__________________ Function strasse() Rect 650,y1,3,100,1 Rect 650,y11,3,100,1 Rect 650,y21,3,100,1 Rect 400,0,1,1024 Rect 900,0,1,1024 y1=y1+2 y11=y11+2 y21=y21+2 If y1=1024 Then y1=0 If y11=1024 Then y11=0 If y21=1024 Then y21=0 End Function ;________________ Function auto() DrawImage auto,autox,autoy If KeyDown(205)=1 Then autox=autox+4 If KeyDown(203)=1 Then autox=autox-4 If autox<402 Then autox=402 If autox>862 Then autox=862 End Function ;______________________ Function create_autos() counter = counter +1 If counter >= 50 Then counter = 0 For x = 0 To 199 info.auto = New auto info\car_x = Rnd(402,862) info\car_y = -20 DrawImage autoruck,info\car_x,info\car_y Next End If End Function ;__________________ Function kollisionen() For info.auto = Each auto If ImagesCollide(auto,autox,autoy,0,autoruck,info\car_x,info\car_y ,0) Then Cls DrawImage crash,450,450 Text 450,450,"You FAIL!" EndIf Next End Function ;------------------------ Function autos_bewegen() For info.auto = Each auto info\car_y=info\car_y+2 If info\car_y=1024 Then info\car_y=-20 Next End Function |
||
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
In der Funktion "Auto" werden nicht existierende Variablen verwendet. Da muss auch ne For-Each Schleife rein ![]() Edit: Nein 'tschuldige habe mich verguckt... ich guck mir den Code grad nochma an und gleich kommt die korrekte Antwort ![]() Edit2: Soo hat ein bisschen länger gedauert. Musst unbedingt ma Codes einrücken ![]() ![]() Edit3: Und die Autos werden nirgends gezeichnet. Nur einmal kurz beim spawnen |
||
Zitat:
Wie poste ich falsch? Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann. |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab ich das so undeutlich beschrieben ? Ich neige ja des öfteren dazu, etwas zu überhasten.
counter golbal setzen und das for x = 0 to 199 weglassen ... oder willst du, dass gleich 200 autos auf einmal kommen Des weiterem wird dein crash logo nur n paar milisecunden angezeigt. Weil du nicht aus der main bzw. der "type schleife" raus gehst. Du muss das ganze programm anhalten. Denkanstoß wenn menu = 0 then - alles machen was man braucht zum zocken wenn menu = 1 then - nur game over zeigen mfg Dottakopf |
||
![]() |
ReLeNtLeSS |
![]() Antworten mit Zitat ![]() |
---|---|---|
AAH GEIL!
Danke es funzt! DANKE AN EUCH ALLE! ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group