2D Animationsproblem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Liquid Blade

Betreff: 2D Animationsproblem

BeitragDi, Aug 17, 2004 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ich bin Liquid Blade und das erste mal in einem Forum Wink.

Ich hab hier ein Blitz 2D Problem das mich langsam Mürbe macht.
Ich bin gerade dabei ein kleines Retro-Demo zu schreiben (64er, Amiga),
mit verschiedenen Effekten.
Im oberen Drittel hab ich ein Logo mit Sinus-Effekt, dann ein Starfield mit Planeten, Scrolls etc.
Das klappt alles ganz gut Smile aber wenn ich jetzt 2Planeten kollidieren lasse, und meine Explosion abspiele (hab ein Bild Array angelegt mit 60 Frames), dann werden Logo-Sinus Starfield langsamer Sad , solange bis die Explosion vorbei ist. In meiner Hauptschleife habe ich einen Timer (FrameTimer (60)), aus dieser Hauptschleife springe ich die Funktion ZeichneExplosion an. An dies Funktion übergebe ich die Bildnummer und zeichne die Explosion mit DrawImage ein.

Kann mir jemand helfen dieses Problem zu lösen ?!?!?!?!?!


Vielen Dank schon mal, euer Liquid Blade >>>LBE<<< Wink

D2006

Administrator

BeitragDi, Aug 17, 2004 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Herzlich Willkommen im BlitzForum

zum Problem:
ist vielleicht nur ein Faselfehler.
Könntest du mal bitte ein bisschen Code preisgeben, insbesondere die Funktion zum zeichnen der Explosion wäre hilfreich.

MfG

BladeRunner

Moderator

BeitragDi, Aug 17, 2004 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde dir empfehlen mit Millisecs() deinen eigenen Timer zu bauen. der "mitgelieferte" Timer Befehl stoppt nämlich das Programm bis die Timerzeit erreicht ist und du verschwendest wertvolle Rechenzeit.
Was das einzeichnen der Explosionen angeht scheint hier der Rechner echt an seine Kapazität gekommen zu sein, hier hilft nur:
- Code optimieren (ein paar gute Tipps auf Blitzbase.de)
- wenn dein Millisecs()-Timer unter die gewünschte Rate fällt weniger auffällige Effekte aussetzen lassen ODER
- von vorneherein die Effekte nur abwechselnd updaten, da das Berechnen von hunderten( oder gar Tausenden) neuen Positionen schon Kapazität frisst, dass Bilder einzeichnen jedoch sehr flott ist.

Hoffe es hilft, und Welcome Aboard.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

DivineDominion

BeitragDi, Aug 17, 2004 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Code wäre gut, ja. Timer mit Millisecs() - top Smile

aber für mich klingt es eher so, als hättest du LoadanimImage noch nicht benutzt (Spart das speichern in ein array) und dass du die Bilder in der Schleife doerder Explosion erst lädst... Nur so eine Vermutung. Würde den Speedeinbruch erklären.
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

Liquid Blade

BeitragDi, Aug 17, 2004 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow ihr seid ja schnell ..... !!!!!!!!!!!!!!!!!! Smile

Hier der gewünschte Code, hab ihn einfach mal rauskopiert (unkommentiert), wenn es nötig ist schick ich euch auch gern die Funktionen !!!!!!!!!Code: [AUSKLAPPEN]
Graphics 800,600,32 ,2
SetBuffer BackBuffer()
FrameTimer = CreateTimer (60)
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

   ; --- Ladefortschritt ---
   ;Global intPercent = 0
   
   LoadingProgress (0)
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

   ; --- Rasterbars ---
   Global UpXRaster =0
   Global UpXRaster2 =0
   Global DownXRaster =0
   Global DownXRaster2 =0
   Dim UpRasterBars (1520)
   Dim DownRasterBars (1520)
   Global image = CreateImage (1520,1)
   Global image2
   Global RasterY1 = 300
   Global RasterY2 = 302
   
   CreateRasterlines()

   UpXRaster =0
   UpXRaster2 =0
   DownXRaster =0
   DownXRaster2 =0

   LoadingProgress (16)
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

   ; --- Ladearbeit für Hauptdemo ---
   AppTitle = "Liquid Blade"
     Global Logo = LoadImage("LBGel.bmp")
 
   Global Net = LoadImage("Net6.bmp")
   Global Flames = LoadAnimImage ("FlameStripFinal.bmp",17,33,0,16)
   Global Edge = LoadImage("RahmenFinal.bmp")
   Global Planet1 = LoadImage ("P1.bmp")
   Global Planet2 = LoadImage ("P2.bmp")
   
   Global w = GraphicsWidth()/2-(ImageWidth(Logo) / 2)
   Global Width = GraphicsWidth()
   Global Height = GraphicsHeight()
   
   LoadingProgress(48)
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   
    Global startangle = 0   
   Global StartPointNet= 0
   Global raZaehler = 60
   Global ruZaehler = 0
   Global alZaehler = 30
   Global inlZaehler = 0
   Global inrZaehler = Width
   Global expZaehler = 0
   Global XPosition = 0
   Global planetZaehler = 0
   Global flameZaehler = 0
   Global StarCount = 500
   
   LoadingProgress(64)
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   
    Dim  sinetable(59)
    For angle = 0 To 59
       sinetable(angle) =  8 * Sin(angle  * 6.101694915254237288135593220339)      
    Next   



   Dim  NetTable(60)
    For NetPoint = 0 To 60
       NetTable(NetPoint) =  NetPoint+1      
    Next   

   LoadingProgress(80)
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
   
   Dim Explo(59)
   For ExCounter = 1 To 60
      If (ExCounter <10) Then
         ; Counter fängt bei 1 an, Array bei 0 !!!!!!
         Explo(ExCounter-1) = LoadImage("0" + ExCounter + ".jpg")
      Else
         Explo(ExCounter-1) = LoadImage(ExCounter + ".jpg")
      End If
   Next

   LoadingProgress(100)
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

   Dim aStar(StarCount,4)

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  ;--- Hauptdemo ---
   FrameTimer = CreateTimer (60)
   bExplode=True
   
   
   initStars()
   
   While Not KeyHit(1)

        WaitTimer (FrameTimer)
        Cls

      
      reinitStars()
      drawSterne()   

      
      If inlZaehler <= (Width/2)-12 Then
         IncomingPath ()
         expZaehler = expZaehler + 2
      End If

         
      If (inlZaehler > (Width/2)-12) And (bExplode=True)  Then
         bildnummer=bildnummer+1
         If bildnummer > 59 Then
            expZaehler=0
            bildnummer=0
            bExplode=False   
         Else
            bolOpenLogo2 = True
            Explode (bildnummer)
         End If
         
      End If
      
      LogoWave ()
      NetRunter ()
      NetRauf ()
      AnimLines ()
      Rahmen()
      DrawFlames()

      Flip (0)
         
        Wend
;      FreeTimer FrameTimer
      
   FreeImage Logo      
   FreeImage Net5
     FreeImage Incoming
         
         
;----------------------------------------------------------------------------------------------------

   Function Explode(bildnummer)

         
            DrawImage Explo(bildnummer),80,50
            
   End Function

;----------------------------------------------------------------------------------------------------


 

xperience2003

BeitragDi, Aug 17, 2004 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
variablennamen typisch anwendungsentwickler Wink

gruß lbe

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group