übliche thema: animation

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

flexo

Betreff: übliche thema: animation

BeitragFr, Jul 15, 2005 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
hi leute

also problem:
ich will meine figur animieren
(charset hab ich)

also sie soll flüssig in alle richtungen laufen...
bis jetzt ist bei mir nur n mist rausgekommen, wo
die person immer tilesetmäßig gesprungen ist
(rechts => char hüpft nach rechts)

also was mir wichtig wäre ist das:
- sie soll flüssig laufen, nicht springen
- sie soll nicht zu schnell laufen können

vllt war mein problem dass ichs mit delay versuchat hab statt millisecs()
aber millisecs macht ja nach "forever" oder "until" weiter...

wäre gut wenn mir des mal kurz erklären könnte mit den kriterien oben..
forensuche usw find ich was aber nicht mein problem..

mfg
flexO
Du bist eizigartig - genau wie jeder andere auch.
  • Zuletzt bearbeitet von flexo am Sa, Jul 16, 2005 10:48, insgesamt einmal bearbeitet

Jack

BeitragFr, Jul 15, 2005 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
DU hat Folgendes geschrieben:
forensuche usw find ich was aber nicht mein problem..


Das glaub ich eigentlich nicht, da ich das Gleiche in "Problem mit Frames" im Beginner-Forum schon einmal geschrieben habe, dazu musst du natürlich deine Animation schon haben, und die Frames musst du dann entsrechend anpassen. Sonst poste noch einmal, wenn du meinen Code haben willst.
Wer kein HTML kann und lernen will, der ist wirklich dumm... MFG Dennerlein

flexo

BeitragFr, Jul 15, 2005 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
will dein code haben ^^
schau grad nochmal forensuche o_O

[EDIT] nix... brauch doch hilfe... [/EDIT]
Du bist eizigartig - genau wie jeder andere auch.

Jack

BeitragSa, Jul 16, 2005 9:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, eigentlich bin ich ja dafür, dass du es selbst herrausfinden solltest, aber da der Code sowieso von anderen Proggrammieren geproggt wurde, gebe ich ihn dir gerne. Hier die Funktion...
Code: [AUSKLAPPEN]
Function drawspieler()
 If KeyDown(203) Then
  laufen = True
  sframe = 5

 ElseIf KeyDown(205) Then
  laufen = True
  sframe = 1
 Else
  laufen = False 
 EndIf 
 
 If laufen = True Then frame = (frame + 1) Mod 2
 DrawImage Figur, 200,100, sframe + frame
End Function

...und hier der ganze Code mit der Funktion(ist bei mir schon erweitert Wink ):
Code: [AUSKLAPPEN]
Global frame
Global laufen = False
Global sframe = False

Function drawspieler()
 If KeyDown(203) Then
  laufen = True
  sframe = 5

 ElseIf KeyDown(205) Then
  laufen = True
  sframe = 1
 Else
  laufen = False 
 EndIf 

 If laufen = True Then frame = (frame + 1) Mod 2

 DrawImage Figur, 200,100, sframe + frame
End Function

Graphics 640,480,16,2
SetBuffer BackBuffer()
ClsColor 0,0,255
Cls

Global Figur = LoadAnimImage("C:\Bilder\Dino.bmp",35,50,0,8)

MaskImage Figur, 255,255,255

Repeat
 Cls
 drawspieler
 If KeyDown(1) Then Exit
 Delay 150
 Flip
Forever
End

Ach ja, dazu noch etwas:

Denke aber daran, dass du den Code verstehen musst, sonst wirst du früher oder später noch einmal fragen, oder dein Code funktioniert nicht, weil du noch Scrolling oder so was eingebaut haben willst. Wink
Wer kein HTML kann und lernen will, der ist wirklich dumm... MFG Dennerlein

flexo

BeitragSa, Jul 16, 2005 10:45
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, genau des gleiche hab ICH auchschon programmiert... Laughing
vorm halben jahr hab ich mich mal drangesetzt... Laughing
(da hab ich mal sowas gemacht)
[ der newbie bin ich höchstens im gebiet types ^^ ]

nya dann hock ich mich nochmal dran.. hab grad ne idee Very Happy
trotzdem danke @ jack/dennerlein

ich glaUB der thread war wohl nix da ich' so schon hatte ^^
Du bist eizigartig - genau wie jeder andere auch.

Jack

BeitragSa, Jul 16, 2005 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche Fehlermeldung erscheint denn Question
Wer kein HTML kann und lernen will, der ist wirklich dumm... MFG Dennerlein

BladeRunner

Moderator

BeitragSa, Jul 16, 2005 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wiedereinmal kann ich von diesem Code nur abraten. Er ist ineffizient und Du solltest ihn Dir nicht einprägen - einfach mieser Stil.
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

flexo

BeitragSa, Jul 16, 2005 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
@ jack
mir gehts ums prinzip quasi

@bladerunner
ich versteh nich wirklich was an dem code so schlimm ist, so ähnlich sieht meiner auch aus...
Du bist eizigartig - genau wie jeder andere auch.

BladeRunner

Moderator

BeitragSa, Jul 16, 2005 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
schon allein das delay- es bremst dein Programm aus. nutze die Forensuche und Du wirst millisecs()timer finden. Ich hab erst vor kurzem was dazu in die Faq gepostet.
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

flexo

BeitragSa, Jul 16, 2005 17:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ich hab mir des mal durchgelesen...
ich wollte s auch mit milisecs machen
aber ich hab keinen blassen schimmer wie ich das schreiben kann ..
Du bist eizigartig - genau wie jeder andere auch.

BladeRunner

Moderator

BeitragSa, Jul 16, 2005 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
nun das prinzip wird dort ja anhand eines funktionierenden codes erklärt... Du musst nur in der timerschleife das frame erhöhrn (und bei maximum wieder auf 0 setzen Wink
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

flexo

BeitragSo, Jul 17, 2005 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

If KeyDown(203) Then

Select array(playerx-1,playery,collidierung)
   Case 0
   playerx=playerx-1
End Select
End If

[...]

drawimage charset,playerx*16,playery*16,frame


mein problem liegt eigentlich vielmehr hieran anls an den frames.
also..
oben erhöht sich die Xkoordinate um 1.
unten aber wird sie mal 16 enommen => die figur springt von x=0 nach x=16
was ich aber haben will ist dass die figur flüssig läuft.
nun kann ich auch nicht sagen
Code: [AUSKLAPPEN]

drawimage charset,px*8,py*8,frame

weil das sonst alles verfälscht...
Shocked

hoffe es ist nachzuvollziehen was ich meine
mfg

trotzdem danke @bladerunner! werd ich gebrauchen können!
Du bist eizigartig - genau wie jeder andere auch.

skey-z

BeitragSo, Jul 17, 2005 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
schau dir dieses beispiel mal an, daraus wirst du was lernen können

https://www.blitzforum.de/view...ht=tilemap

Zitat:
[ der newbie bin ich höchstens im gebiet types ^^ ]


nja, kann man drüber streiten, wenn man sowas schon nicht hinbekommt^^
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

flexo

BeitragSo, Jul 17, 2005 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
nja, kann man drüber streiten, wenn man sowas schon nicht hinbekommt^^



ich mein ich hab bis jetzt nen editor, dynamische tilemap (eben das), ne figur die drauf laufen kann und kollidiert, und sie kann tabak einsammeln!
Laughing

ich mag nur den schönheitsfehler beim laufen beheben..
Du bist eizigartig - genau wie jeder andere auch.

skey-z

BeitragSo, Jul 17, 2005 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
ja das habe ich schon verstanden, ist dein charakter unabhängig von tileset und dessen scrolling?

du musst einfach nur nen teiler von deiner tilegröße nehmen und den charakter so bewegen, wenn ers dann immernoch zu schnell laüft erstelle ne variable, indem die millisecs() gespeichert werden, das noch vor der hauptschleife.

Code: [AUSKLAPPEN]

zeit = millisecs()

;hauptschleife


in der hauptschleife prüst du, ob die neue variable millisecs()größer ist als die alte +250(animationszeit)

Code: [AUSKLAPPEN]

if millisecs()+250>=zeit then
  frame=frame + 1
  zeit=millisecs()
endif


durch das unterteilen der schritte hüoft deine figur nicht mehr und durch den zuvor beschriebenen code funktioniert die animation.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

flexo

BeitragSo, Jul 17, 2005 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy
genau das meinte ich..
thx!

thx auch an bladerunner..
dann werd ichs in angriff nehmen Very Happy

mfg, flexo
Du bist eizigartig - genau wie jeder andere auch.

flexo

BeitragDi, Aug 02, 2005 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

px=laufenx(px,py) ;funktion aufrufen

[...]

Function laufeny(px,py)

If KeyDown(200) Then   ;wenn UP gedrückt wird...
If richtung<>1 frameu=3   ;es war vorher nicht gedrückt
Else If MilliSecs()+250>=zeit  ;es war vorher gedrückt
   zeit=MilliSecs()
   zaehler=(zaehler+1) Mod 3 ;er zählt von 0 bis 3
   frameu=zaehler+3 ;addiert den frame, also zählt er von 3 bis 5
Endif
EndIf
richtung=1
Select array(px,py-1,2)
   Case 0 ;wenn er nicht kollidiert mit dem nächsten feld...
   py=py-1
End Select
Endif

Return py ;geben ich den wert zurück

End Function


ich versteh mein code selber nichtmehr Shocked
dabei sollte's nur eine lauf-animation werden...
Du bist eizigartig - genau wie jeder andere auch.

Alfadur

BeitragDi, Aug 02, 2005 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ich zeig dir mal meinen code ...

Code: [AUSKLAPPEN]

Function move_player()
   If playermoving=True Then

      If Vplayer\actiontime<=0 Then
      If Vplayer\frametime=0 Then
         Vplayer\frame=Vplayer\frame+1
         If Vplayer\frame>2 Then Vplayer\frame=1
         Vplayer\frametime=15
      Else
         Vplayer\frametime=Vplayer\frametime-1
      End If

      ;collision
         If get_tile(Vplayer\x#-Absxoff+Sin(Vplayer\turn#)*16-16,Vplayer\y#-Absyoff+Cos(Vplayer\turn#)*16-16,MOVELEVEL)>0 Then
            Vplayer\x#=Vplayer\x#-Sin(Vplayer\turn#)
            Vplayer\y#=Vplayer\y#-Cos(Vplayer\turn#)
         Else
            Vplayer\x#=Vplayer\x#+Sin(Vplayer\turn#)
            Vplayer\y#=Vplayer\y#+Cos(Vplayer\turn#)
         End If
         If Vplayer\walkmode=0 Then Vplayer\actiontime=TIME_SNEAK
         If Vplayer\walkmode=1 Then Vplayer\actiontime=TIME_WALK
         If Vplayer\walkmode=2 Then Vplayer\actiontime=TIME_RUN
      End If    
   End If    
End Function


damit lauf ich auf meiner tilemap rum und funktioniert prächtig....

ahso, ich seh gerade das du wohl nich in alle richtungen läufst sondern nur auf den tiles ...
willst du also, das er bei einem tastendruck immer smooth 16 pixel sich animiert in die entsprechende richtung läuft?
A Cray is the only computer that runs an endless loop in less than four hours.

flexo

BeitragDi, Aug 02, 2005 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
also mein prblem liegt eher darin, dass ich
versuche, meine figur zu animieren.
also sie soll

a) langsam(er) laufen
b) erst den linken fuß, dann rechten usw....

dürte nicht sonderlich schwer sein aber ich steh zur zeit auf der leitung...
Du bist eizigartig - genau wie jeder andere auch.

Alfadur

BeitragDi, Aug 02, 2005 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
das macht ja genau diese stelle

Code: [AUSKLAPPEN]

      If Vplayer\frametime=0 Then
         Vplayer\frame=Vplayer\frame+1
         If Vplayer\frame>2 Then Vplayer\frame=1
         Vplayer\frametime=15
      Else
         Vplayer\frametime=Vplayer\frametime-1
      End If


wenn frametime null ist wird der frame um eins erhöht und frametime wieder auf 15 gesetzt, ansonsten wird frametime eben solange verringert bis es null ist... das heißt alle 15 frames wird der animationsframe um eins erhöht... besser ist es das mit millisecs zu machen, aber irgendwie hab ich wohl damals dafür keine notwendigkeit gesehen ...
A Cray is the only computer that runs an endless loop in less than four hours.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group