Schlag animation?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

black_threat

Betreff: Schlag animation?

BeitragMi, Jul 14, 2004 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Also brauche hilfe bei einer schlag ani.
Wie mach ich sowas das es die 4 bilder die ich hab nur einmal ausführt wenn man die entsprechende tast drückt?
In renés buch konnte ich sowas nicht wirklich finden Confused

Ich hoffe es kann mir da jemand helfen
black_threat

Michi1988

BeitragMi, Jul 14, 2004 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Millisecs Shocked

Hubsi

BeitragMi, Jul 14, 2004 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit einer zusätzlichen Variable. Wird die Taste gedrückt ist sie True. Solange sie True ist und die Ani nicht den max. Frame erreicht hat, wrid hochgezählt. Dann prüfst Du ob die Taste nicht gedrückt ist und in diesem Fall auf False setzen und Ani auf Startwert bringen oder was auch immer.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

black_threat

BeitragMi, Jul 14, 2004 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If KeyDown(57) And frmschlag <> 2 Then ani=1
If ani=1 Then
  If MilliSecs() > tmrschlag + 500 Then
   tmrschlag=MilliSecs()
   frmschlag=(frmSparks + 1) Mod 2
DrawImage schlag,100,100,frmschlag
   EndIf
   EndIf

If Not KeyDown(57) Then ani= 0 : frmschlag = 0


warum funzt das nicht hab alles so gemacht wie du gesagt hast oder?

Seoman

BeitragMi, Jul 14, 2004 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Du übernimmst dich...
 

black_threat

BeitragMi, Jul 14, 2004 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Seoman hat Folgendes geschrieben:
Du übernimmst dich...


kannst du mir nich sagen wie es funktioniert, bitte
  • Zuletzt bearbeitet von black_threat am Mi, Jul 14, 2004 21:26, insgesamt einmal bearbeitet
 

black_threat

BeitragMi, Jul 14, 2004 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry, wegen doppelpost, hab mich verclickt Embarassed

Seoman

BeitragDo, Jul 15, 2004 10:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Für was für einen Spieltyp brauchst du den Schlag? Bei einem Beat'm up musst du z.B. noch testen, ob andere Tasten gedrückt sind, in welche Richtung du blickst...

Hier ist erst mal der Grundsatz:

Ich würde es folgendermaßen machen:

Davon ausgehend, dass du mit Functions arbeitest:

In die Bewegungsabfrage des Spielers einen If-Block:

Code: [AUSKLAPPEN]

If KeyHit (11) Then ; Wenn 0-Taste gedrückt ist

schlagen()

EndIf


Dann eine neue Function

Code: [AUSKLAPPEN]

Function Schlagen()

For frame=1 to 4

DrawImage Schlag, x, y, frame
Delay30 ; Sonst wäre die Animation zu schnell, pass das deinen Bedürfnissen an. Kanst natürlich auch Wait oder ähnliches machen
Next
End Function



So musst du die Taste zwar immer dann neu drücken, wenn du wieder Schlagen willst, aber das hat ja auch Vorteile, weil man sonst ja einfach nur durchgehend drücken müsste und er würde immer weiter schlagen.

Das ist ein ganz simpler Grundsatz. Ich hoffe er funktioniert. Sag mir Bescheid, wenns nicht geht.

mfg
Seoman



PS: An was arbeitest du und wie lange programmierst du schon?
 

black_threat

BeitragDo, Jul 15, 2004 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, funktioniert, nur wie kann ich machen das die animation statt dem charakter angezeigt wird?

ps: hab mir vor 3 tagen ein buch (Programmieren leicht gemacht mit Blitz Basic von Rene Meyer) gekauft, und hab eigentlich erst jetzt richtig zu programmieren angefangen. Vorher hatte ich nur codeschnipsel von tuts zusammengesetz und son zeug...

Seoman

BeitragDo, Jul 15, 2004 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch dich erst mal an etwas leichterem...
Naja, gut dass es funktioniert.
Wenn es der Spieler ist, der Schlägt, jenachdem ob man ne Taste drückt, würde ich es folgendermaßen machen:

Erstelle eine Animierte Spielergrafik.
Sagen wir Mal Bild
1- 4 Läuft nach rechts
5-8 Läuft nach links
9-12 Läuft zu dir
13-16 Läuft von dir weg
(Rollenspiel)
17-20 Schlaganimation

In der Bewegungsabfrage von Spieler sieht das dann folgendermaßen aus:

Code: [AUSKLAPPEN]

If KeyDown (rechtstaste) and Kollisionsabfrage Then
x=x+1
For frame= 1 to 4
DrawImage Player , x, y, frame
Next
Endif

If KeyDown (linkstaste) and Kollisionsabfrage Then
x=x-1
For frame= 5 to 8
DrawImage Player , x, y, frame
Next
Endif

If KeyDown (ZuDirTaste) and Kollisionsabfrage Then
y=y+1
For frame= 9 to 12
DrawImage Player , x, y, frame
Next
Endif

If KeyDown (VonDirWegTaste) and Kollisionsabfrage Then
y=y-1
For frame= 13 to 16
DrawImage Player , x, y, frame
Next
Endif

If KeyHit (Schlagtaste) Then
For frame= 17 to 20
DrawImage Player , x, y, frame
Next
Endif



Mach überall noch deine Sachen rein (Functions, Wait, Delay, was eben so ansteht) und dann sollte es funktionieren. Wenn du für den Spieler keine Animation hast, dann lass einfach immer die For Next Schleife raus und schreib einfach DrawImage player, x, y, 1
Und nur bei der Schlag-Animation die For-Next-Schleife. Dementsprechend hätte deine Animation nur noch 5 Stufen:
1 Normal
2-5 Schlagend
Vielleicht hast du auch die Bewegung ganz anders geregelt, du musst einfach ein wenig rumbasteln und diesen Grundsatz deinen Bedürfnissen anpassen.
Wieder gilt, wenns nicht geht, nachfragen!
mfg
Seoman


EDIT:
Achtung!!!!!!!!!!!!!!!! Momentan kann man schräg laufen (weil der Charakter in einer Abfrage sowohl nach links als auch nach oben bewegt werden kann) Dann sieht die Animation etwas seltsam aus, versuch das also irgendwie zu umgehen, wenn du eine animierte Spielergrafik hast. Bei nur einem Normal-Bild macht das nichts!

joachim_neu

BeitragDo, Jul 15, 2004 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
kann das sein, dass du dich übernimmst, seoman? das ist nähmlich eine sehr unpraktische variante, wie ich bei meinem eigenen projekt feststellen musste, denn du musst davon ausgehen, dass das game nicht nur von einer schlaganim, sondern auch mit einem hintergrund lebt, so dass du dann bei jeder anim-function auch nochmal alle möglichen sachen malen musst, die in der hauptschleife vorkommen, wie gegner, hintergründe, tiles, objekte usw... also ich würde und werde es nichtmehr so machen!

mfg

JOACHIM NEU
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

Hubsi

BeitragDo, Jul 15, 2004 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Seoman hat Folgendes geschrieben:
Versuch dich erst mal an etwas leichterem...
Code: [AUSKLAPPEN]

If KeyDown (rechtstaste) and Kollisionsabfrage Then
x=x+1
For frame= 1 to 4
DrawImage Player , x, y, frame
Next
Endif

usw...

Laughing Ist echt nicht böse gemeint, mir gefällt nur der Zusammenhang Laughing
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Seoman

BeitragDo, Jul 15, 2004 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mich nicht wirklich drum bemüht. Die Aufteilung und alles ist seine Sache. Ich meine ja nur den Grundsatz, nämlich nicht ein Spielerbild und ein Schlagbild zu nehmen, sondern beides in einem. Ich kenn weder den Rest seines Spiels, noch den Spieltyp, und ich glaube, dass er schon den Grundsatz versteht. Das reicht doch, oder? Damit kann er weitermachen.
Dieser Code dient nicht dazu, ihm die perfekte Lösung zu liefern, denn sonst lernt er nichts daraus.

Und mal ganz ehrlich, Joachim_neu, wenn du eine bessere Lösung weißt, dann poste sie doch einfach und zieh nicht über meine her!

Seoman

BeitragDo, Jul 15, 2004 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
joachim_neu hat Folgendes geschrieben:
... du musst davon ausgehen, dass das game nicht nur von einer schlaganim, sondern auch mit einem hintergrund lebt, so dass du dann bei jeder anim-function auch nochmal alle möglichen sachen malen musst, die in der hauptschleife vorkommen, wie gegner, hintergründe, tiles, objekte usw...


Dazu kann ich nur folgendes sagen:

Hast du dir den Rest meines Beitrages auch angeguckt? DAS IST IN DER BEWEGUNGSABFRAGE DES SPIELERS!!!!!!!!!!!!!!!!!!!!!!!
Wie er die Gegner aufs Papier bringt, steht in einer ganz anderen Function. Er kann natürlich auch das Ducken in eine neue Funktion bringen und sie am Ende der Spielerbewegung oder der Hauptschleife abfragen.
Das Schöne an diesem Script ist doch, dass ihm noch alle Möglichkeiten offen stehen und ich ihm nichts vorschreibe, denn genau das will ich nicht tun: Ihm einen Teil seines Spiels Programmieren! Ich zeige ihm bloß, wie man diesen Teil programmieren KANN!

BladeRunner

Moderator

BeitragDo, Jul 15, 2004 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Nichts desto trotz ist es so dass deine Schleifenkonstruktion äusserst ungünstig ist, Seoman. Ich erklär dir gern wieso:
So wie du es machst (for frame= 1to x ... draw... next) malst Du in einer (!) Schleife sämtliche Animationsschritte für die Boxerei/Bewegung/Wasauchimmer. Ich denke mal der moderne Rechner braucht für diese Schleife nur Bruchteile einer Millisekunde. Optischer Effekt: Du siehst einen Kuddelmuddel aus BewegungsSchritten mit dem Letzten als obersten.

Richtig wäre es, bei jedem Durchlauf der Hauptschleife einen Timer zu prüfen und nur bei entsprechenden Grenzwerten ein neues Frame einzuleiten.
Also:
Code: [AUSKLAPPEN]
if Keydown(...) then schlag=1

if schlag = 1 and schlag_timer < millisecs() then
    schlag_timer=Millisecs()+200 ;alle .2Sek. ein neues Frame
    drawimage bild,x,y,frame
    frame=frame+1
    if frame > max_frame then
        frame=0
        schlag=0
    endif
endif
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

Seoman

BeitragDo, Jul 15, 2004 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok! Hast recht!
@Hubsi
Ich meine ja nur, dass Black_Threat sich entweder zu wenig anstrengt oder er noch etwas Übung braucht, ehe der Spieler den Gegner angreifen sollte. Meine Lösung war ungünstig, geb ich zu, aber trotzdem hat es erstmal funktioniert. Ich hätte es noch umschreiben müsse. Mir hätte Black_Threats Frage viel besser gefallen, wenn sie so ausgesehen hätte.
Ich habe ein Problem mit einer Schlag-Animation. Ich habe eine IF-Abfrage gemacht und dann eine For_Next -Schleife, aber jetzt bewegen sich die Gegner in der Zeit nicht...
Denn eine solche Frage wäre berechtigt (Ich kannte den Befehl Millisecs() noch nicht, habe ihn jetzt aber nachgeschlagen). Ich finde es einfach ein wenig schade, dass man sich ein Spiel schon fast komplett von der Community Scripten lassen kann.

Hubsi

BeitragDo, Jul 15, 2004 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war auch gar keine Kritik oder irgendwie böse gemeint. Mir ist nur das gleich ins Auge gestochen Very Happy Das der Code ungestestet und recht flink geschrieben ist, ist mir klar Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group