Agilitätsbalken und flüssige darstellung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

nagl

Betreff: Agilitätsbalken und flüssige darstellung

BeitragDi, Mai 17, 2005 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist eine Funktion von mir. Ziel ist eine Agilitätsanzeige. Dabei sollen Auf einem Balken, je nach Agilitätsstärke Monster und Held dargestellt werden (wie bei einem Rennen). Problem ist nur das, das fortbewegen ruckelt, wenn ich das wie unten mache (nach Pixeln).
Kennt jmd eine andere Möglichkeit?
Wenn ja, wäre nett wenn man die hier postet.
gruß nagl

BlitzBasic: [AUSKLAPPEN]
;Mit der Agilitätsfunktion wird die ansteigende Agilität von Held (Held1Icon) und Monster (Monster1Icon)
;auf dem AgiBalken dargestellt.
;Beim Beispiel wird dabei von Held1\Agilitaet=10 und Monster1\Agilitaet=7 ausgegangen



Function Agilitaet()

Monster1AgilitaetMom#=Float(Monster1\AgilitaetMom) ;Monster1AgilitaetMom# wird von mir benutzt um die Rechnung beim Monster mit Float zu ermöglichen

While Agilitaet=0

Held1\AgilitaetMom = Held1\AgilitaetMom+1 ;Agilität des Helden steigt um 1 Pixel

Monster1AgilitaetMom# = Monster1AgilitaetMom# + Float(Monster1\Agilitaet) / Float(Held1\Agilitaet) ;Agilität des Monsters steigt um 0,7 Pixel
Monster1\AgilitaetMom = Monster1AgilitaetMom# ;um Monsteragilität darzustellen wird abgerundet
;der Wechsel zur Type-Variable hängt mit
;dem weiteren Prog zusammen
If Held1\AgilitaetMom>398 And Agilitaet=0 Then ;Bedingungen wenn Heldagilität ende des Balkens erreicht
Agilitaet=1 ;die Werte hängen mit der Position auf dem Bildschirm zusammen (siehe unten)
Held1\AgilitaetMom=399
EndIf
Color 255,0,0
Text 0,0,Monster1AgilitaetMom#


If Monster1\AgilitaetMom>398 And Agilitaet=0 Then ;Bedingungen wenn Monsteragilität ende des Balken erreicht
Agilitaet=5
Monster1\AgilitaetMom=399
EndIf


DrawBlock Hintergrund, 0, 0
DrawImage Held1Attack,580,200,0
DrawImage Monster1Attack,60,200,0
DrawImage AgiBalken,209,20
DrawImage Monster1Icon,Monster1\AgilitaetMom,15 ;Darstellung des Monsters auf dem Balken
DrawImage Held1Icon,Held1\AgilitaetMom,15 ;Darstellung des Monsters auf dem Balken

Color 0,0,0 ;====unwichtig=====
Rect (580,250,32,2,1) ;
Color 0,255,0 ;
Rect (580,250,32*Held1\HP/Held1\HPmax,2,1) ;
;
If Held1\MPmax>0 Then ;
Color 0,0,0 ;
Rect (580,252,32,2,1) ;
Color 75,75,255 ;
Rect (580,252,32*Held1\MP/Held1\MPmax,2,1) ;
End If ;====ENDE==========

Delay 50 ;pause um den Lauf von Held- u. Monsteragilität darstellen zu können
Flip

Wend

End Function

Problem wenn der Held Pixel für Pixel flüssig läuft.
wird das Langsamere Monster ruckelnd dargestellt, da für Werte wie 2,1 und 2,8 -2 oder 4,2 und 4,9 -4 dargestellt wird.

ich möchte aber gerne beide fließend darstellen ohne das einer ruckelt oder springt

--------------------------Hilfe erwünscht-----------------------
the page of the
nagl-community Wink
http://www.pacimal.de.vu

nagl

BeitragDi, Mai 17, 2005 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
hat keiner eine lösung?
....
the page of the
nagl-community Wink
http://www.pacimal.de.vu
 

hitokiri

BeitragDi, Mai 17, 2005 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
mach die leisten länger ?
mal ohne witz.
das prob am springen ist ja, dass pixel eben nur ganze zahlen sind.
also nimm auch nur ganze zahlen, mach die agility als anzahl pixel
die der balken zunimmt, bei 100 ist derjeinge dran und fängt wieder von 0 an.

Twit

BeitragDi, Mai 17, 2005 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow ! du hast aber lange gewartet man es gibt auch leute die Arbeiten oder zur schule gehn.
Tote leben länger.
 

BlackJack

BeitragDi, Mai 17, 2005 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Don't pay for Delay!
*Team: StuffMakers by Basic_Progger*
I know what I mean.

nagl

BeitragDi, Mai 17, 2005 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist ja , das die Leiste nicht ewig lang sein soll (AUFLÖSUNG)
Ausserdem bleibt das Problem ja bestehen. Der eine soll sich ja schneller bewegen. Sobald das passiert "springt" er von Punkt zu Punkt, was nunmal komplett sche*sse aussieht. Aber es muss doch was geben, damit die Bewegung flüssig wird. Wenn nich, muss ich halt damit Leben
the page of the
nagl-community Wink
http://www.pacimal.de.vu
 

Dreamora

BeitragDi, Mai 17, 2005 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Delay ist das Problem. Da bleibt das Programm immer für 1/20s stehen.
Du kannst deswegen auch nur maximal 20 Bilder pro Sekunde aktualisieren.

Das musst du über Zeitdifferenzen ( Millisecs() ) handhaben.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

nagl

BeitragDi, Mai 17, 2005 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
kk, ich schreib mal son teil (einfach gehalten)
mit milisecs....
wenns hinhaut poste ich das mal, dann kann thread geclosed werden.
Wenn nicht, stelle ich mein Problem im neuen Ausmaße vor
Laughing
in diesem sinne
nagl
the page of the
nagl-community Wink
http://www.pacimal.de.vu

nagl

BeitragDi, Mai 17, 2005 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
So hab das Programm mal geschrieben.
BlitzBasic: [AUSKLAPPEN]
Graphics 320,240,16,1
zeit=MilliSecs()
SetBuffer BackBuffer()
Repeat
ClsColor 255,255,255
Cls
Color 0,0,0
Rect 50,116,200,8,1 ; Malen des schwarzen Balkens (entspricht Agibalken)
;--------------------------
;-------BERECHNUNG---------
If MilliSecs()-zeit > 1 Then
zeit=MilliSecs()
x_rot=x_rot+1 ;nach 1 oder mehr bewegt sich rot
timer=timer+1 ;timer alle milisekunden erhöht
If timer>2 Then x_blau=x_blau+1 ;nach 2 oder mehr bewegt sich blau
If timer>3 Then x_gruen=x_gruen+1 : timer=0 ;nach 3 millisekunden bewegt sich grün



EndIf
If x_rot=196 Then x_rot=0 ; wenn Ende vom schwarzen Balken erreicht
If x_gruen=196 Then x_gruen=0 ; wird der jeweilige Block
If x_blau=196 Then x_blau=0 ; wieder an den Startpunkt gesetzt
;------------------------

Color 0,0,255 ; ----------------------------------
Rect 50+x_blau,124,4,6,1 ; DARSTELLUNG
Color 255,0,0 ; der jeweiligen
Rect 50+x_rot,110,4,6,1 ; Rechtecke inlusive
Color 0,255,0 ; Verschiebung durch Zeit
Rect 50+x_gruen,110,4,6,1 ; ----------------------------------


Flip
Until KeyHit(1)


Dadurch, ruckeln jedoch immernoch die Balken "grün" und "blau".
Man könnte das natürlich lösen, indem man die Werte einfach erhöht. Der Timer für alle 1ms beträgt:
BlitzBasic: [AUSKLAPPEN]
;-------BERECHNUNG---------
If MilliSecs()-zeit > 1 Then

x_rot=x_rot+3
x_blau=x_blau+2
x_gruen=x_gruen+1
zeit=MilliSecs()
If x_rot>196 Then x_rot=0 ; wenn Ende vom schwarzen Balken erreicht
If x_gruen>196 Then x_gruen=0 ; wird der jeweilige Block
If x_blau>196 Then x_blau=0 ; wieder an den Startpunkt gesetzt
EndIf

;------------------------
.
Allerdings ist das zu schnell Embarassed
Gibt es nun noch eine Lösung? Langsam geht das Befehlsrepertoir aus Sad
Hoffe ihr könnt mir weiter helfen..
gruss nagl
p.s (zum testen code copy-pasten)
the page of the
nagl-community Wink
http://www.pacimal.de.vu
 

getlose

BeitragMi, Mai 18, 2005 0:18
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du bb3d hast, mache es mit sprites.
die kannst du sehr viel genauer bewegen.
ansonsten wüsste ich leider auch keine lösung.

nagl

BeitragMi, Mai 18, 2005 1:19
Antworten mit Zitat
Benutzer-Profile anzeigen
is 2d
..aber in bb3d ne genauere bewegung als pixel?...kann ich mir nicht so richtig vorstellen.
mfg nagl
the page of the
nagl-community Wink
http://www.pacimal.de.vu
 

hitokiri

BeitragSa, Mai 21, 2005 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hatte noch eine letzte idee...
du könntest mit "antialiasing" tricksen, indem die agilitätsbalken in nem
array gespeichert werden.
du nimmst dann in deinem beispiel deinen mongo mit 10 als 1 pixel pro step auf dem balken laufen.
das monster mit 7 würde dann 0.7pixel pro step laufen was zu ruckeln führen wurde. aber wenn du nun z.b. sagst :
den pixel einfach das mittelding zwischen hintergrundfarbe und balkenfarbe ?
das du sozusagen für jedes .x dann die farbwerte des nächsten pixels mal 0.x nimmst. sollte flüssiger aussehen.
naja, hoffe jemand hat kapiert, was ich meine...
musst natürlich auch nich in nem array machen, kannst ja dann auch einfach per writepixelfast

Ctuchik

BeitragSo, Mai 22, 2005 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich würds mit Floats machen, das sieht wenigstens noch ein bischen flüssiger aus! Ansonsten kannst du eigentlich nur ne höhere Auflösung benutzen. Mehr fällt mir zumindest spontan nicht ein!
Code: [AUSKLAPPEN]

Graphics 320,240,16,1
timer1 = CreateTimer(60)
SetBuffer BackBuffer()
ClsColor 255,255,255
Global x_rot#,x_gruen#,x_blau#

Repeat

  WaitTimer timer1
  Cls
  Color 0,0,0
  Rect 50,116,200,8,1           ; Malen des schwarzen Balkens (entspricht Agibalken)
  ;--------------------------
  ;-------BERECHNUNG---------

  x_rot#=x_rot#+1.0               
  x_blau#=x_blau#+0.5
  x_gruen#=x_gruen#+0.3     
     
  If x_rot>=196.0 Then x_rot=0.0         ; wenn Ende vom schwarzen Balken erreicht
  If x_gruen>=196.0 Then x_gruen=0.0     ; wird der jeweilige Block
  If x_blau>=196.0 Then x_blau=0.0       ; wieder an den Startpunkt gesetzt
  ;------------------------

  Color 0,0,255                     ; ----------------------------------
  Rect Floor(50+x_blau),124,4,6,1   ;           DARSTELLUNG
  Color 255,0,0                     ;         der jeweiligen
  Rect Floor(50+x_rot),110,4,6,1    ;       Rechtecke inlusive
  Color 0,255,0                     ;     Verschiebung durch Zeit
  Rect Floor(50+x_gruen),110,4,6,1  ; ----------------------------------

  Flip

Until KeyHit(1)

End
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group