Erdbeben

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Iguan

Betreff: Erdbeben

BeitragMi, Apr 19, 2006 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Wie macht ihr das, wenn ihr in einem 2d Spiel (mit 3d-Sprites), ein Erdbeben realisieren wollt?

1. Macht ihr ALLE! X und Y Variablen von einer zufälligen ErdbebenVerschiebungX und einer zufälligen ErdbebenVerschiebungY-Variable abhängig? ----> Umständlich

2. Kopiert ihr den Bildschirm kurz vor Flip mit CopyRect, um ihn versetzt zu zeichnen? ---> etwas langsam

oder wie macht ihr das?

Hubsi

BeitragMi, Apr 19, 2006 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
ql:Origin Very Happy Damit den Bildschirmnullpunkt um 2 oder 3 Pixel in die eine bzw. andere Richtung verschieben und schon siehts aus würde der Boden zittern Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Apr 19, 2006 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Da du anscheinend mit B3D arbeitest, kannst du auch einfach nur die Kamera verschieben/wackeln...

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 19, 2006 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ein Beispiel für BB2D
Code: [AUSKLAPPEN]
Graphics 640 ,480,16,1
FPS = CreateTimer (60)
SetFont LoadFont ("arial",50)
SetBuffer BackBuffer ()

While Not KeyDown (1) ;###########
    ;
    If KeyDown (57) Then
        Origin Rand (-1 ,1) ,Rand (-1 ,-1)
    End If
    ;
    Color 0 ,0, $00FF00
    Rect 0 ,0,639,479,1
    ;
    Color 0 ,0, $0000FF
    Text 320 ,240,"Wackel Test",1,1
    ;
    WaitTimer (FPS)
    Flip
    Cls
Wend;##########

End

Hier noch ein schöner ,aber nur für BPlusCode: [AUSKLAPPEN]
SaveBuffer DesktopBuffer(), "screenshot.bmp"
SetBuffer DesktopBuffer()
Global GrW=GraphicsWidth ()
Global GrH=GraphicsHeight()
Global GrD=GraphicsDepth ()
Global pos

Graphics GrW,Grh,GrD,1
desk = LoadImage ("screenshot.bmp")
Font = LoadFont ("Arial",80,1)
Dim FPS(3):FPS(0)= 60 : FPS(0)=CreateTimer(FPS(0))
SetBuffer BackBuffer()
SetFont font
While Not KeyDown(1);########################################################################################
;Cls
DrawBlock desk,Rand(-1,1),Rand(-1,1)

BildAendern ()
texten(4,0)
texten(0,$ff0000)

If MouseXSpeed () Or MouseYSpeed() Or GetKey() Then End

;Text 9,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs()
;WaitTimer (FPS(0))
Flip

Wend:End ;############################################################################################
Function BildAendern ()
    Color 0,0,255
    Rect 0,pos,GrW ,2 , 1
    pos = (pos +2)Mod grH
End Function

Function Texten(Pix,Col)
    Color 0,0,Col
    Text GrW/2+pix,Grh/2-100+pix,"Besonders schwerer",1,1
    Text GrW/2+pix,Grh/2-33+pix,"AusnahmeFehler aufgetreten! ",1,1
    Text GrW/2+pix,Grh/2+33+pix,"Bitte stellen sie sicher,",1,1
    Text GrW/2+pix,Grh/2+100+pix,"das der PC mit Strom versorgt wird! ",1,1
End Function


Funktioniert wie ein bilschirmschoner, also finge weg von Tastaur und Maus sonst ist es beendet!
Für 3D habe ich auch noch eins, finde es aber im Augenblick nicht wieder!
[BB2D | BB3D | BB+]

DerHase

BeitragMi, Apr 19, 2006 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Da würde ich einfach origin benützen.
Der Beispiel Code wäre in die Hauptschleife bzw vor dem flip dies einzusätzen:
Code: [AUSKLAPPEN]
origin rand(-1,1), rand(-1,1)

Iguan

Betreff: Hitzegeflimmer

BeitragMi, Apr 19, 2006 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ueeey! Danke vielmals für eure Antworten! mit origin und zusätzliches wackeln der Kamera klappt das supi!! Very Happy

Nun habe ich aber noch ein problem, und ich dachte, deswegen mache ich nicht exta einen neuen Beitrag!

Es geht um Hitze-Geflimmer:

Normal in 2d würde ich das etwa so lösen:

Code: [AUSKLAPPEN]


 For i = 1 To 100
    XX = Rnd(0,580)
    YY = Rnd(0,400)
    GrabImage(Bild,XX,YY)
    DrawImage Bild,XX+Rnd(-2,2),YY+Rnd(-2,2)
 Next



nun, dies drosselt leider die FPS-Rate! Daher dachte ich daran, das ganze mit 3d (Hardwarebeschleunigt)
zu lösen. Ich habe ein Sprite (SPR1), welches ich auf Bildschirmgrösse skaliert habe (640*480 Pixel). Nun möchte ich die Textur dieses Sprites mit dem Obigen effekt bearbeiten, und dem Sprite zuweisen.

Mein code dazu:

Code: [AUSKLAPPEN]


...

Tex = CreateTexture(640,480,1+256)
;hier habe ich bereits schon diverse Modüsse :)  ausprobiert

...

Repeat
  cls
  ...
  ...
  ...
  For i = 1 To 100
    XX = Rnd(0,580)
    YY = Rnd(0,400)
    CopyRect XX,YY,50+Rnd(-10,10),50+Rnd(-10,10),XX+Rnd(-2,2),YY+Rnd(-2,2),BackBuffer(),TextureBuffer(Tex)
  Next

  EntityTexture Spr1,Tex
  ScaleTexture Tex,1.6,1.06
  EntityAlpha Spr1, 1
  RenderWorld

  SetBuffer TextureBuffer(Tex)
  Cls
  SetBuffer BackBuffer()
  Flip
Forever




Nun mein Problem: Wenn ich dies so mache, dann erscheint irgendwie nicht alles auf diesem Sprite, obwohl ich diesen Effekt unmittelbar vor Flip hingesetzt habe!
könnt ihr mir helfen, einen schönen Hitzeflimmer-Effekt hinzukriegen, der nicht die FPS-Rate so enorm drosselt wie im obigen Beispiel?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Apr 19, 2006 23:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuche mal die Textur auf einer Größe von ~32x32 zu bearbeiten. Das ganze lässt du dann auf Bildschirmgröße skallieren. So eine Skallierung nimmt kaum Rechenzeit weg. Und du solltest immer Texturen in 2er Potenzen benutzen zB: 16x16, 32x32, 64x64, 128x128 usw... Intern würde deine Textur jetzt 1024x1024 groß sein! Das macht schon 4MB Grafikspeicher weg, der da ständig umkopiert wird...
 

ke^kx

BeitragDo, Apr 20, 2006 8:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Am einfachsten wäre es für dich einfach eine animierte Textur mit Geflimmere zu machen und diese dann Transparent über dein normales Zeug zu legen. Die muss dann auch nicht so groß sein und sieht gut aus.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Iguan

BeitragDo, Apr 20, 2006 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Hectic: Das mit den 2er Potenzen wusste ich bereits. Aber wieso 32x32?? ich möchte ja den ganzen Bildschirm zum Flimmern bringen!

@Jiriki: Ich glaube nicht, dass dies dann wie ein Hitzegeflimmer aussieht, wenn blos eine transparente Textur bewegt wird. Ich hätte schon gerne den Bildschirminhalt als geflimmer...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group