CLS Effekt

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: CLS Effekt

BeitragSa, Okt 02, 2004 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute.
Guckt euch bitte mal folgenden Source an:
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

Type dot
   Field x,y
   Field speed
End Type

For i = 1 To 2
   d.dot = New dot
   d\x = 0
   d\y = (i*200)
   d\speed = Rand(3,6)
Next

Repeat
;Cls

For d.dot = Each dot
   d\x = d\x + d\speed   
   Plot d\x,d\y
Next

Flip
Until KeyHit(1):End    

Ihr seht 2 Punkte, die sich von links nach rechts bewegen. Da kein CLS vorhanden ist, kommt dieser "Linien-Effekt" zustande.
Doch sobald man das auskommentierte CLS wieder aktiviert sind es nur 2 normale Punkte, die sich bewegen.
Und nun zu meiner Frage:
Wie würdet ihr so einen "Linien-Effekt" am besten lösen, natürlich unter beibehaltung von CLS! Ich hätte zwar eine Methode, die aber sehr Speicherfressend ist Twisted Evil
Also, ich bin gespannt!

MFG
~ Hey Ho Let's Go ~

dominik

BeitragSa, Okt 02, 2004 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
du meinst jetz also das man das mit dem line befehl macht oder?:
line startx, starty, zielx, ziely



Code: [AUSKLAPPEN]
Graphics 640, 480
Repeat
  Cls
  Line 0, 100, i ,100
  i = i + 1
  Delay 10
Until i >= 480
End



so vll?
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Dominik!
Ne, also das ist es eher nicht, was ich wollte...
Das Problem sollte lieber mit Plot bzw. Rect/Oval gelöst werden!
~ Hey Ho Let's Go ~

dominik

BeitragSa, Okt 02, 2004 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ja dann machs halt mit rect. ic hversteh nich ganz wo jetzt hier dein Problem is.

du musst nur in meine code anstatt line rect reinschreiben und fertig.
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, dann beschreib ichs genauer:
Später soll diese Bewegung lenkbar sein. Du drückst Pfeiltaste nach oben
und die Bewegung läuft nach oben! Du drückst nach links und die Bewegung geht nach links. Und das ganze sollte auch so sein, das es für jeden Type hinkommt. Also irgendwie was allgemeineres Confused
~ Hey Ho Let's Go ~

dominik

BeitragSa, Okt 02, 2004 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
dann speicherst du das ganze in types und machst in die repeat haubtschleife ne for next schleife rein die dann jede linie einzelnt berechnet.

hast dich jetzt überhaubt schon mit atan und sin cos beschägtigt? dann solltest da auch drauf kommen.
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
So, darauf lief es ja hinaus. Komme ich also nicht um die Winkelberechnung herum?
~ Hey Ho Let's Go ~

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Okt 02, 2004 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
da sehe ich viele Möglichkeiten von langsam bis schnell
Frage ist nur wie viele Punkte es denn max. werden können oder sollen!
immer waagerecht oder auch senkrecht und diagonal oder ganz wirr?

Hat sich dann wohl geklärt!, meien frage

Sollen denn die Punkte immer an bleiben

Also eine Möglichkeit ist das alles in ein Image zu schreiben und das dann einzeichnen
Da werden dann keine weiteren großen Functionen mehr benötigt!
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Bild = CreateImage(GraphicsWidth (),GraphicsHeight ())

Type dot
   Field x,y
   Field speed
End Type

For i = 1 To 2
   d.dot = New dot
   d\x = 0
   d\y = (i*200)
   d\speed = Rand(3,6)
   
Next

Repeat
Cls

For d.dot = Each dot
   d\x = d\x + d\speed
      SetBuffer ImageBuffer(bild)
     Plot d\x,d\y
   SetBuffer BackBuffer()
Next

DrawImage bild,0,0

Flip
Until KeyHit(1):End
[BB2D | BB3D | BB+]
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, also um die Bewegung zu verdeutlichen:
So wie bei Snake - also Senkrecht und Waagerecht.

@Ralli: Ja, die Punkte sollen eine gewisse Zeit alle gezeichnet stehen bleiben, bis irgendwann alle Punkte gelöscht werden.
Aber wie genau meinst du das mit einem Image?

BTW: Ein Punkte-Limit gibt es nicht!

Edit: Ich sehe gerade deinen Source, moment eben ...

Okay, also das ist eine gute Idee, Ralli. Nur wie sieht das ganze später aus, wenn der Punkt mit nem Stein z.B kollidiert und halt auch andere Bilder zu sehen sind?

Edit2: Habs grad getestet! Also ich glaube, deine Idee hat keinerlei Einschränkungen auf Kollision oÄ, nicht wahr Ralli?
~ Hey Ho Let's Go ~

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Okt 02, 2004 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
wie meinste das mit kollisionen,
wenn es nicht mit diesem Dummybild geprüft wird dann gibt es auch keine Kollision!
[BB2D | BB3D | BB+]
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das meine ich:
Code: [AUSKLAPPEN]

Graphics 800,600,16,2

stein  = CreateImage(20,20)
SetBuffer ImageBuffer(stein)
Color 255,0,0
Rect 0,0,20,20

SetBuffer BackBuffer()

Bild = CreateImage(GraphicsWidth (),GraphicsHeight ())

Type dot
   Field x,y
   Field speed
End Type

For i = 1 To 2
   d.dot = New dot
   d\x = 0
   d\y = (i*200)
   d\speed = Rand(3,6)
Next

Repeat
Cls

For d.dot = Each dot
   d\x = d\x + d\speed
   SetBuffer ImageBuffer(bild)
    Color 255,255,255
     Plot d\x,d\y
   SetBuffer BackBuffer()
   
   If ImageRectCollide(stein,500,200-20/2,0,d\x,d\y,1,1) Then End
Next

DrawImage bild,0,0

DrawImage stein,500,200-20/2
;DrawImage stein,500,400-20/2

Flip
Until KeyHit(1):End

Klappt eigentlich ganz gut.
Nun gibt es noch ein weiteres Prob, dazu gleich mehr - ich mach mal nen Sample...
~ Hey Ho Let's Go ~
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nun hat das ganze schon nen bisschen das Snake-Feeling
(Mit den Pfeiltasten wird gelenkt):
Code: [AUSKLAPPEN]

Graphics 800,600,16,2

stein  = CreateImage(20,20)
SetBuffer ImageBuffer(stein)
Color 255,0,0
Rect 0,0,20,20

SetBuffer BackBuffer()

Bild = CreateImage(GraphicsWidth (),GraphicsHeight ())

Type dot
   Field x,y
   Field speed
End Type

For i = 1 To 1
   d.dot = New dot
   d\x = 0
   d\y = 200;(i*200)
   d\speed = Rand(3,6)
Next

r = 6

Repeat
Cls

For d.dot = Each dot
   Select r
      Case 6
         d\x = d\x + d\speed
      Case 8
         d\y = d\y - d\speed
      Case 4
         d\x = d\x - d\speed
      Case 2
         d\y = d\y + d\speed
   End Select                
   SetBuffer ImageBuffer(bild)
      Color 255,255,255
      Plot d\x,d\y
   SetBuffer BackBuffer()
   If KeyHit(200)
      r = 8
   ElseIf KeyHit(208)
      r = 2
   ElseIf KeyHit(203)
      r = 4
   ElseIf KeyHit(205)
      r = 6
   EndIf             
   If ImageRectCollide(stein,500,200-20/2,0,d\x,d\y,1,1) Then End
Next

DrawImage bild,0,0
DrawImage stein,500,200-20/2

Flip
Until KeyHit(1):End

Wie könnte man am besten eine Selbstüberschneidung abfragen? Also angenommen man lässt das Ding nach rechts fahren, lenkt dann nach oben, nach links und anschließend nach unten: Wie fragt man dann ab, ob das Teil sich selbst sozusagen überschneidet? Confused
Code: [AUSKLAPPEN]

If RectsOverlap(d\x,d\y,1,1,d\x,d\y,1,1)

Geht nicht Wink
~ Hey Ho Let's Go ~

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Okt 02, 2004 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Must einfach mit dem image bild überprüfen Code: [AUSKLAPPEN]
   SetBuffer ImageBuffer(bild)
       If  ReadPixel(d\x,d\y ) And $ffffff Then Stop
      
         WritePixel( d\x,d\y,$FFFFFF)
      
   SetBuffer BackBuffer()


Hab deinen Plot mal abgeändert in writepixel, ist schneller.....
und debugger an wegen dem STOP
[BB2D | BB3D | BB+]
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, so kanns gemacht werden! Dann darf aber nichts anderes die Farbe der Punkte haben, wenn ich das überprüfe Smile
~ Hey Ho Let's Go ~

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Okt 02, 2004 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
du überprüft doch das dummybild, und nicht den Backbuffer
da gibt es doch nur die weißen Punkte!

ein Problem könnte noch auftauchen wenn die Speed nicht konstant bleibt
da du dann zwischen den Punkten durchschlüpfen könntest
dann must du noch jeden einzelnen Punkt zwischen den 2 Sichtbaren einbauen mit einer Farbe nahe Schwarz die dann auch geprüft werden kann z.b.
rgb= $010101
[BB2D | BB3D | BB+]
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja stimmt. Denkfehler...
Nun bin ich gerade dabei, den Kram richtig einzufügen...
Doch irgendwo ist ein Fehler.
So zeige ich das Bild an:
Code: [AUSKLAPPEN]

SetBuffer ImageBuffer(bild)
   DrawImage b1,l\x,l\y
SetBuffer BackBuffer()

Doch leider zeigt der mir nichts an! Erst, wenn ich Setbuffer Imagebuffer()
und Setbuffer Backbuffer() auskommentiere, zeigt der mir das Bild an.
Doch dann geht diese Bewegung ja nicht mehr Confused
Ansonsten befinde ich mich im Backbuffer() und habe ein globales Bild erstellt:
Code: [AUSKLAPPEN]

Global Bild = CreateImage(GraphicsWidth (),GraphicsHeight ())

Das große Imagebuffer Bild wird nach dem b1 Bild gemalt.
Wo könnte der Fehler liegen?
~ Hey Ho Let's Go ~

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Okt 02, 2004 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie es aussieht malst du auf das DummyBild wo nur die linien gespeichert werden ein Bild hinein
Das geht natürlich nicht weil du dann die linien übermalst!
Wahrscheinlich kommst mit den buffern ein wenig durcheinander!?

und was fügst du denn jetzt alles ein....

Und was soll das denn werden wenn es fertig ist ?
[BB2D | BB3D | BB+]
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Was es werden soll?
Das ist noch nicht der Rede Wert Wink
Naja, ich bin heute Abend zu faul und frag zuviel!
Wahrscheinlich hast du mit den Buffern recht, ich werds halt durchchekcen und selbst probieren und rausfinden... Very Happy
Aber Danke Ralli.
~ Hey Ho Let's Go ~

rambo256

BeitragSa, Okt 02, 2004 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du einen Snake Clon machen willst,dann mach den bitte Tile-basiert und nicht sooo Rolling Eyes
So ist das doch so gut wie unmöglich da etwas vernünftiges zu bekommen,aber du kannst mich gerne eines besseren belehren Wink
Asus F53z

Das Leben ist eine reine Konkatenation...
 

Blitzkrieg Bop

BeitragSa, Okt 02, 2004 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie im ICQ erwähnt: Kein Snake Clone Very Happy
~ Hey Ho Let's Go ~

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group