Erdbeben
Übersicht

![]() |
IguanBetreff: Erdbeben |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ql:Origin ![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da du anscheinend mit B3D arbeitest, kannst du auch einfach nur die Kamera verschieben/wackeln... | ||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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)
|
||
![]() |
IguanBetreff: Hitzegeflimmer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ueeey! Danke vielmals für eure Antworten! mit origin und zusätzliches wackeln der Kamera klappt das supi!! ![]() 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? |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ 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... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group