Zu viele kometen
Übersicht

emdeBetreff: Zu viele kometen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, bei meinem momentanen spiel schleicht sich ein fehler beim erstellen der kometen ein. Das programm soll nur einmal einen omet erstellen wen a=1 ist, aber er macht da irgendetwas komisches, er macht 2 vilder und die bewegen sich denn ganz merkwürdig. Wäre nett wenn ihr mir sagen könntet was das problem ist.
Code: [AUSKLAPPEN] Graphics 640,480 SetBuffer BackBuffer() SeedRnd MilliSecs() Type g Field xg Field yg Field energie End Type Type k Field xk Field yk Field energiek End Type Type k2 Field xk2 Field yk2 Field energiek2 End Type Type s Field xs Field ys End Type Type w Field xw Field yw End Type Type st Field xst Field yst End Type Global xp=100 Global yp=100 Global energiep=100 Global schusskraftp=100 Global fuelp=100 Global geldp=0 Global waffep=0 Global player=LoadImage("player.bmp") MaskImage player,255,0,255 Global komet=LoadImage("meteor1.bmp") MaskImage komet,255,0,255 Global komet2=LoadImage("meteor2.bmp") MaskImage komet2,255,0,255 Global gegner=LoadImage("gegener.bmp") MaskImage gegner,255,0,255 Global schuss=LoadImage("schuss.bmp") MaskImage schuss,255,0,255 Global schrott=LoadImage("weltraumschrott1.bmp") MaskImage schrott,255,0,255 Global stern=LoadImage("star1.bmp") MaskImage stern,255,0,255 Global stern2=LoadImage("star2.bmp") MaskImage stern2,255,0,255 Global anzeige=LoadImage("anzeige.bmp") Global a=0 Repeat Cls x#=x#-1 FPS() TileImage stern,x#,30 DrawImage player,xp,yp DrawImage anzeige,0,380 If KeyDown(200) Then yp=yp-1;hoch If KeyDown(208) Then yp=yp+1;runter If KeyDown(203) Then xp=xp-1;links If KeyDown(205) Then xp=xp+1;rechts If yp>234 yp=234 EndIf Text 100,0,x# If yp<-116 yp=-116 EndIf If xp<-51 xp=-51 EndIf If xp>516 xp=516 EndIf If KeyHit(57) ;And waffep=1 sc.s=New s sc\xs=xp+40 sc\ys=yp+42 EndIf For sc.s=Each s DrawImage schuss,sc\xs,sc\ys sc\xs=sc\xs+2 Next Text 200,0,a If x#=-100 a=a+1 EndIf If a=1 komete.k=New k komete\xk=516 komete\yk=Rnd(-116,234) EndIf For komte.k= Each k komete\xk=komete\xk-1 DrawImage komet,komete\xk,komete\yk If komete\xk<-51 Delete komete.k EndIf Next Flip Until KeyHit(1) Global Frames, FramesJeSekunde, ZaehlStart Function FPS() Frames = Frames + 1 If ZaehlStart + 1001 < MilliSecs() Then FramesJeSekunde = Frames Frames = 0 ZaehlStart = MilliSecs() EndIf Text 10, 10, FramesJeSekunde + " FPS" End Function |
||
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] For komte.k= Each k komete\xk=komete\xk-1 DrawImage komet,komete\xk,komete\yk If komete\xk<-51 Delete komete.k EndIf Next In der ersten Zeile (im Beispiel) hast du dich verschrieben. Es muss komete heißen.. einfach ein schreibfehler. noch ein Tipp: Nachdem x = -100 ist a = 1 und das ändert sich ja nicht. Hier solltest du eine Begrenzung in der erstellung neuer Kometen einbauen, da es nicht nur sehr langsam, sondern auch sehr unübersichtlich wird. |
||
emde |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, leider ändert das nichts an dem fehler das immer noch zu viele kometen kommen | ||
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier kommen zwar zu viele, aber immerhin bewegen sie sich normal und es sind auch nicht nur zwei...
Hier sollte dann vielleicht noch eine Sperre für die Erstellung folgen. Code: [AUSKLAPPEN] Graphics 640,480
SetBuffer BackBuffer() SeedRnd MilliSecs() Type g Field xg Field yg Field energie End Type Type k Field xk Field yk Field energiek End Type Type k2 Field xk2 Field yk2 Field energiek2 End Type Type s Field xs Field ys End Type Type w Field xw Field yw End Type Type st Field xst Field yst End Type Global xp=100 Global yp=100 Global energiep=100 Global schusskraftp=100 Global fuelp=100 Global geldp=0 Global waffep=0 Global a=0 Repeat Cls x#=x#-1 FPS() ;TileImage stern,x#,30 Rect xp,yp, 25, 25 ;DrawImage anzeige,0,380 If KeyDown(200) Then yp=yp-1;hoch If KeyDown(208) Then yp=yp+1;runter If KeyDown(203) Then xp=xp-1;links If KeyDown(205) Then xp=xp+1;rechts If yp>234 yp=234 EndIf Text 100,0,x# If yp<-116 yp=-116 EndIf If xp<-51 xp=-51 EndIf If xp>516 xp=516 EndIf If KeyHit(57) ;And waffep=1 sc.s=New s sc\xs=xp+40 sc\ys=yp+42 EndIf For sc.s=Each s Rect sc\xs,sc\ys, 15, 15 sc\xs=sc\xs+2 Next Text 200, 0, "a: " + a If x#=-100 a = 1 ElseIf x < -1000 Then a = 0 EndIf If a = 1 komete.k = New k komete\xk = 516 komete\yk = Rnd(-116,234) EndIf For komete.k= Each k komete\xk = komete\xk - 1 Rect komete\xk,komete\yk, 25, 25 If komete\xk <= 51 Then Delete komete.k EndIf Next Text 20, 20, x Flip Until KeyHit(1) Global Frames, FramesJeSekunde, ZaehlStart Function FPS() Frames = Frames + 1 If ZaehlStart + 1001 < MilliSecs() Then FramesJeSekunde = Frames Frames = 0 ZaehlStart = MilliSecs() EndIf Text 10, 10, FramesJeSekunde + " FPS" End Function |
||
emde |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
UNd wie kann man denn eine sperre einbauen | ||
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
mal ein Denkanstoß...
Nach einer bestimmten Zeit sollen Gegner erstellt werden. Bei dir erfolgt dies, wenn x = -100, dann wird a = 1. Mach doch einfach a entweder nach einer bestimmten Zeit oder besser nach einer bestimmten Anzahl erstellter Kometen wieder 0. zB könntest bei jedem erstellten Kometen eine Variable um 1 erhöhen, sodass sie die Anzahl der Kometen speichert. Wenn sie zB 20 erreicht hat, soll a=0 sein und damit hört die Produktion wieder auf. Wenn ein Komet aus dem Feld geht oder er zerstört wird, wird die Variable, die die Anzahl speichert, um 1 niedriger, sodass wieder neue produziert werden bis wieder 20 erreicht sind... usw usw Dass Problem an Zeit oder an deiner Methode, nämlich eine Variable runterzählen funktioniert nicht bei jedem gleich, sondern jeweils so schnell wie der Rechner "rechnen" kann, also wie gut er ist. Ein Stichwort dazu ist "Frameunabhängiges Programmieren". ich würe aber vorschlagen, dass du dir erstmal ein funktionierendes Grundgerüst zusammenbastelst und dann mal hier im Forum danach suchst. |
||
- Zuletzt bearbeitet von Hagbard am So, Apr 18, 2010 13:27, insgesamt einmal bearbeitet
emde |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dein denkanstoss hat bei mir gute wirkung gezeigt, dank. Aber nun noch eine frage. Ich habe es sso gemacht das wenn kein komte da ist wird einer erstellt und a auf 1 gesetzt und sobald er den bildschirm verlässt wird er gelöscht und a auf eins gestzt und ein neuer genacht. Nun möchte ich es aber gerne so haben das immer 3 kometen auf dem bildschrim sind, aber ich weiss nicht genau wie ich das anstellen soll.
Code: [AUSKLAPPEN] If a = 0 komete.k = New k komete\xk = 516 komete\yk = Rnd(-116,234) EndIf For komete.k= Each k komete\xk = komete\xk - 1 DrawImage komet, komete\xk,komete\yk a=1 If komete\xk <= -150 Then Delete komete.k a=0 EndIf Next danke für deine mühe |
||
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wichtig ist mir, dass du das auch verstehst... trotzdem poste ich jetzt mal den code für einen ansatz:
1. zwischen x = -100 und x = -1000, wird a = 1 2. Ist dies der Fall UND beträgt die Anzahl der Kometen weniger als 3, wird wieder neu erstellt und anzahl steigt um 1 ein. 3. Wenn ein Komet aus dem Feld geht, wird anzahl um 1 niedriger. Code: [AUSKLAPPEN] If x#=-100 a = 1 ElseIf x < -1000 Then a = 0 EndIf If a = 1 And anzahl < 3 komete.k = New k anzahl = anzahl + 1 komete\xk = 516 komete\yk = Rnd(00,434) EndIf For komete.k= Each k komete\xk = komete\xk - 1 Rect komete\xk,komete\yk, 25, 25 If komete\xk <= 51 Then Delete komete.k anzahl = anzahl - 1 EndIf Next Übrigens: Nicht wundern, wenn die Produktion der Kometen irgendwann aufhört, dann ist x < - 1000 und a wieder 0. |
||
emde |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, nun entsteht noch ein problem bei der collisions überprüfung.
BB sagt mir das das objekt nicht existiert. Code: [AUSKLAPPEN] If ImagesCollide(schrotte,schrott\xw,schrott\yw,0,schuss,sc\xs,sc\ys,0) Delete schrott.w Delete sc.s EndIf |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Teste das mal mit ImagesOverlap!
PS: Du kannst auch Zitat: Delete schrott
schreiben! |
||
Twitter
Download Jewel Snake! Windows|Android |
emde |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Leider sagt er immer noch das selbe ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group