Seite 1 von 1

vll hintergrund für credits

Verfasst: 02.06.2005 23:12
von zigapeda
Hi

habe bzw. wollte gerade was proggn und dann ist das rausgekommen:

Code: Alles auswählen

InitSprite()
InitKeyboard()
Dim sternp(1000,1)
Dim sternm(1000,1)
OpenScreen(1024,768,16,"sterne")

For a = 0 To 1000
  For b = 0 To 1
    sternm(a, b) = Random(20) - 10
  Next b
  sternp(a, 0) = 512
  sternp(a, 1) = 384
Next a

Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
For a = 0 To 1000
  If sternp(a, 0) < 0 Or sternp(a, 0) > 1024 Or sternp(a, 1) < 0 Or sternp(a, 1) > 768
    sternp(a, 0) = 512
    sternp(a, 1) = 384
  EndIf
  StartDrawing(ScreenOutput())
    Plot(sternp(a, 0), sternp(a, 1), RGB(255,255,255))
  StopDrawing()
  sternp(a, 0) = sternp(a, 0) + sternm(a, 0)
  sternp(a, 1) = sternp(a, 1) + sternm(a, 1)
Next a
FlipBuffers()
Until KeyboardPushed(#pb_key_escape)
Hätte eigentlich was anderes werden sollen aber das sieht auch lustig aus.
Wenn man es eine kurze zeit laufen lässt kommt ein fehler weiß einer warum?
Eigentlich ist es unsinn aber man könnte es als hintergrund für z.B. Credits bei einem Spiel hernehmen. es ist immer anderst.
Noch eine frage zum speicher, braucht das viel? Ich weiß die arrays sind ziemlich groß aber es werden ja nur zahlen zwischen 0 und maximal 1024 dargestellt. Ich kenn mich nicht so aus und deshalb frage ich wie hoch der speicherverbrauch ungefähr ist also zu hoch oder geht es schon noch?

Verfasst: 03.06.2005 00:35
von Hroudtwolf
Da war ein Fehler drin.
Das hatten wir doch heut schon mal :?

Code: Alles auswählen

InitSprite()
InitKeyboard()
Dim sternp(1000,1)
Dim sternm(1000,1)
OpenScreen(1024,768,16,"sterne")

For a = 0 To 1000
  For b = 0 To 1
    sternm(a, b) = Random(20) - 10
  Next b
  sternp(a, 0) = 512
  sternp(a, 1) = 384
Next a

Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
For a = 0 To 1000
  If sternp(a, 0) < 0 Or sternp(a, 0) > 1024 Or sternp(a, 1) < 0 Or sternp(a, 1) > 768
    sternp(a, 0) = 512
    sternp(a, 1) = 384
  EndIf
  StartDrawing(ScreenOutput())
;Geänderter Bereich
;---------------------------------------------------------------------------------------
    If sternp(a,0)>0 And sternp(a,0)<1024 And sternp(a,1)<767 and sternp(a,1)>0 
      Plot(sternp(a, 0), sternp(a, 1), RGB(255,255,255))
    EndIf 
;---------------------------------------------------------------------------------------    
    
  StopDrawing()
  sternp(a, 0) = sternp(a, 0) + sternm(a, 0)
  sternp(a, 1) = sternp(a, 1) + sternm(a, 1)
Next a
FlipBuffers()
Until KeyboardPushed(#pb_key_escape)

Verfasst: 03.06.2005 00:37
von Deeem2031
Ein Fehler raus, zwei neue rein ;)

EDIT: Ne, is doch schwachsin, dafür soll ja die Abfrage davor sein, die is buggy...

Code: Alles auswählen

InitSprite()
InitKeyboard()
Dim sternp(1000,1)
Dim sternm(1000,1)
OpenScreen(1024,768,16,"sterne")

For a = 0 To 1000
  For b = 0 To 1
    sternm(a, b) = Random(20) - 10
  Next b
  sternp(a, 0) = 512
  sternp(a, 1) = 384
Next a

Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
For a = 0 To 1000
  If sternp(a, 0) < 0 Or sternp(a, 0) >= 1024 Or sternp(a, 1) < 0 Or sternp(a, 1) >= 768
    sternp(a, 0) = 512
    sternp(a, 1) = 384
  EndIf
  StartDrawing(ScreenOutput())
    Plot(sternp(a, 0), sternp(a, 1), RGB(255,255,255))
  StopDrawing()
  sternp(a, 0) = sternp(a, 0) + sternm(a, 0)
  sternp(a, 1) = sternp(a, 1) + sternm(a, 1)
Next a
FlipBuffers()
Until KeyboardPushed(#pb_key_escape)

Verfasst: 03.06.2005 00:42
von Hroudtwolf
Da ist nix Schwachsinn.
Können wir jetzt nicht mehr kopieren ? /:->

Verfasst: 04.06.2005 13:43
von zigapeda
Hab es nochmal ein bischen überarbeitet:

Code: Alles auswählen

InitSprite()
InitKeyboard()
Dim sternp(1000,1)
Dim sternm(1000,1)
OpenScreen(1024,768,16,"sterne")

For a = 0 To 1000
  For b = 0 To 1
    sternm(a, b) = Random(20) - 10
  Next b
  sternp(a, 0) = 512
  sternp(a, 1) = 384
Next a

Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
For a = 0 To 999
  If sternp(a, 0) < 0 Or sternp(a, 0) > 1024 Or sternp(a, 1) < 0 Or sternp(a, 1) > 768
    sternp(a, 0) = 512 : sternp(a, 1) = 384
    sternm(a,0) = Random(20) - 10
    If sternm(a,0) = 0
      sternm(a,0) = sternm(a,0) + Random(3)
    EndIf
    sternm(a,1) = Random(20) - 10
    If sternm(a,1) = 0
      sternm(a,1) = sternm(a,1) + Random(3)
    EndIf
    If sternm(a,1) = sternm(a,0)
      sternm(a,1) = sternm(a,1) + Random(3)
    EndIf
  EndIf
  StartDrawing(ScreenOutput())
    Plot(sternp(a, 0), sternp(a, 1), RGB(255,255,255))
  StopDrawing()
  sternp(a, 0) = sternp(a, 0) + sternm(a, 0)*2
  sternp(a, 1) = sternp(a, 1) + sternm(a, 1)*2
Next a
StartDrawing(ScreenOutput())
  Plot(0,0,RGB(0,0,0))
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#pb_key_escape)
Jetzt hab ich das erreicht was ich eigentlich erreichen wollte aber der fehler kommt immer noch nach einer bestimmten zeit.

Verfasst: 04.06.2005 13:52
von Andre
zigapeda hat geschrieben:Jetzt hab ich das erreicht was ich eigentlich erreichen wollte aber der fehler kommt immer noch nach einer bestimmten zeit.
Ja, weil Du wieder nicht beachtet hast, was Hroudtwolf schon gezeigt hat:
Du "plottest" einfach wild drauf los und damit auch außerhalb des sichtbaren Bildschirms. Dadurch die Fehlermeldung...

Entscheidend aus Hroudtwolf's Code ist folgender Abschnitt:

Code: Alles auswählen

  If sternp(a, 0) < 0 Or sternp(a, 0) >= 1024 Or sternp(a, 1) < 0 Or sternp(a, 1) >= 768 
    sternp(a, 0) = 512 
    sternp(a, 1) = 384 
  EndIf 
Damit werden die Sterne bei Erreichen des Bildschirmrandes auf einen Ursprungswert ínnerhalb des Bildschirms zurückgesetzt.

Verfasst: 04.06.2005 14:33
von zigapeda
achso ich bin durcheinander gekommen aber Hroudtwolf hat eine zweite überprüfung eingebaut.
Ich hab den fehler gemacht das ich bei 0 anfange und deshalb der bildschirm nur 1023 lang und 767 hoch ist.
Das von Hroudtwolf geschrieben hat hab ich mir schon angeschaut aber ich hab es nicht eingebaut weil ich ja schon eine überprüfung hab.
Also dann danke

Verfasst: 06.06.2005 16:28
von Lebostein
Es ist immer wieder schade, wie die Leute mit dem geschwindigkeitsvernichtenden Befehl StartDrawing() umgehen. In deinem Code wird bei jedem Schleifendurchlauf 1000(!) mal StartDrawing() und StopDrawing() aufgerufen. Warum nicht nur einmal?

Code: Alles auswählen

InitSprite()
InitKeyboard()
Dim sternp(1000,1)
Dim sternm(1000,1)
OpenScreen(1024,768,16,"sterne")

For a = 0 To 1000
  For b = 0 To 1
    sternm(a, b) = Random(20) - 10
  Next b
  sternp(a, 0) = 512
  sternp(a, 1) = 384
Next a

Repeat
ExamineKeyboard()
ClearScreen(0,0,0)

StartDrawing(ScreenOutput())

For a = 0 To 999
  If sternp(a, 0) < 0 Or sternp(a, 0) >= 1024 Or sternp(a, 1) < 0 Or sternp(a, 1) >= 768
    sternp(a, 0) = 512 : sternp(a, 1) = 384
    sternm(a,0) = Random(20) - 10
    If sternm(a,0) = 0
      sternm(a,0) = sternm(a,0) + Random(3)
    EndIf
    sternm(a,1) = Random(20) - 10
    If sternm(a,1) = 0
      sternm(a,1) = sternm(a,1) + Random(3)
    EndIf
    If sternm(a,1) = sternm(a,0)
      sternm(a,1) = sternm(a,1) + Random(3)
    EndIf
  EndIf
  Plot(sternp(a, 0), sternp(a, 1), RGB(255,255,255))
  sternp(a, 0) = sternp(a, 0) + sternm(a, 0)*2
  sternp(a, 1) = sternp(a, 1) + sternm(a, 1)*2
Next a
Plot(0,0,RGB(0,0,0))

StopDrawing()

FlipBuffers()
Until KeyboardPushed(#pb_key_escape)
Jetzt ist es wahnsinnig schnell und man hat noch genug Ressourcen, um anderen Code hinzuzufügen (als Hintergrundaktivität ist es so besser geeignet). Damit es wieder schöner aussieht, kann man ja jetzt ein Bremse einbauen, abhängig von der Rechnergeschwindigkeit...

Am besten und übersichtlichsten ist es aber immer noch, wenn man zunächst alle Berechnungen ausführt, d.h. die neuen Koordinaten berechnet und in einem zweiten Teil der Hauptschleife die ganzen Ausgaben macht. Der Code oben ist ja so ne Art Mischung aus Berechnung und gleichzeitiger Ausgabe....

Verfasst: 06.06.2005 18:40
von THEEX
@Lebostein

Dann hattest aber auch grad die Plotdarstellung ausserhalb des Darstellbereichs korrigieren können.

Verfasst: 07.06.2005 10:08
von Lebostein
CSprengel hat geschrieben:@Lebostein

Dann hattest aber auch grad die Plotdarstellung ausserhalb des Darstellbereichs korrigieren können.
Habs noch geändert... :)