Welcome on MasterOf13FPS! MasterOf13FPS

Register today or sign up if you are already a member and never miss any cool content again :)

Animationen im Client

MasterOf13FPS

Administrator
Staff member
Administrator
MasterOf13FPS
Joined
Jul 11, 2020
Messages
0
Reaction score
25
Points
0
Hey,
Ich wollte mal fragen wie man in seinen Client Animationen einbauen kann?
Ich habe leider überhaupt keine Ahnung von OpenGL und wollte deshalb fragen ob mir da jemand helfen kann. Ich wollte zb. in meinem ClickGui Animationen einbauen nur weiß ich nicht wie ich das mache.

Hoffe ihr könnt mir helfen ^^

MFG

Edit: Ich würde gerne Animationen dieser Art machen:
 
Last edited by a moderator:
hat nicht viel mit opengl zutun sondern mit timern
 
Also ich weiß ja nicht was für Animationen du in deinem Client einbauen willst, aber ich will mich natürlich nicht zu weit aus dem Fenster lehnen, aber ich möchte meinen für einfach Slide Animationen braucht man keine OpenGL Ahnung. Ich mach mir mal die Mühe und versucht dir das so gut wie möglich zu "erklären".

Ich erkläre das jetzt mal an dem Beispiel meiner Keystrokes:

Die Animation dabei ist das die Keystrokes erst kleine Kreise sind und wenn man die Taste drückt dann werden sie größer und wenn man die Taste nicht drückt, werden sie wieder so klein wie vorher.
Bild:

- https://imgur.com/BC5e2wE

Und nun zur Erklärung:

Als allererstes muss man einen neuen Iterator erstellen
- private int animate = 0;

Und dann kommt man eigentlich schon zu der Animation, und zwar fragt man hier ab, ob der Key / eine Aktion durchgeführt wird. Wenn Ja, soll sich der int mit 1 Addieren und wenn nein, soll sich der int mit 1 Subtrahieren.
Aber da, wenn man die Aktion/Key einmal beginnt oder drückt, der int sich bis ins Unendliche addiert oder subtrahiert, muss man ein Limit setzen. In diesem Beispiel setzte ich das Limit beim Addieren aus maximal 2. Also wenn animate sich über 2 addiert bleibt es bei 2 und geht nicht ins unendliche. Beim Subtrahieren setzte ich das Limit bei 0, da der int nicht unter den Wert 0 gehen soll.
Das ganze müsste dann, aus das Beispiel bezogen, wie folgt aussehen:

if(KeyW.pressed) {
animate++;
if(animate > 2) {
animate = 2;
}
} else {
animate--;
if(animate < 0) {
animate = 0;
}
}

KeyW ist in diesem Beispiel die verkürzte Form von mc.gameSettings.keyBindForward, damit das einfach ordentlicher aussieht.
Das macht man, wie folgt:

- KeyBinding KeyW = mc.gameSettings.keyBindForward;

Und dann nur noch in deinen drawRect oder wo auch immer du das benötigst, diesen int animate an diese Stelle schreiben, wo du dein Width oder Height initialisierst. Das habe ich so gemacht:

- RenderHelper.drawFullCircle(GuiScreen.width - 39, GuiScreen.height - 60, check ? 8 + animate : 10, color);

In dem Falle benutzte ich das nicht beim Width oder Height, sondern bei der Größe des Kreises. Und nun zu deinem Beispiel:
Wenn man z.b. die Animation haben will, dass die Liste / der Rect mit den Modulen "reinfährt", muss man einfach nur so eine Animation erstellen und das wird, dann halt nicht das Limit 2 beinhalten aber vom Grundgerüst her müsste es gleich sein.

Hoffe, ich konnte dir damit helfen, falls ich etwas falsch erklärt habe, bitte nicht gleich beleidigen, sondern am besten mir den Fehler schreiben damit ich ihn korrigieren kann. Natürlich hoffe ich auch das ich es recht Einsteiger freundlich gemacht habe. Viel Erfolg ^^
 
Was für timer lol xd
Damit du vielleicht eine animation schneller oder langsam machen kannst und die aktuellen sekunden abfragen kannst? nein stimmt braucht man nicht haste recht
 
Also ich weiß ja nicht was für Animationen du in deinem Client einbauen willst, aber ich will mich natürlich nicht zu weit aus dem Fenster lehnen, aber ich möchte meinen für einfach Slide Animationen braucht man keine OpenGL Ahnung. Ich mach mir mal die Mühe und versucht dir das so gut wie möglich zu "erklären".

Ich erkläre das jetzt mal an dem Beispiel meiner Keystrokes:

Die Animation dabei ist das die Keystrokes erst kleine Kreise sind und wenn man die Taste drückt dann werden sie größer und wenn man die Taste nicht drückt, werden sie wieder so klein wie vorher.
Bild:

- https://imgur.com/BC5e2wE

Und nun zur Erklärung:

Als allererstes muss man einen neuen Iterator erstellen
- private int animate = 0;

Und dann kommt man eigentlich schon zu der Animation, und zwar fragt man hier ab, ob der Key / eine Aktion durchgeführt wird. Wenn Ja, soll sich der int mit 1 Addieren und wenn nein, soll sich der int mit 1 Subtrahieren.
Aber da, wenn man die Aktion/Key einmal beginnt oder drückt, der int sich bis ins Unendliche addiert oder subtrahiert, muss man ein Limit setzen. In diesem Beispiel setzte ich das Limit beim Addieren aus maximal 2. Also wenn animate sich über 2 addiert bleibt es bei 2 und geht nicht ins unendliche. Beim Subtrahieren setzte ich das Limit bei 0, da der int nicht unter den Wert 0 gehen soll.
Das ganze müsste dann, aus das Beispiel bezogen, wie folgt aussehen:

if(KeyW.pressed) {
animate++;
if(animate > 2) {
animate = 2;
}
} else {
animate--;
if(animate < 0) {
animate = 0;
}
}

KeyW ist in diesem Beispiel die verkürzte Form von mc.gameSettings.keyBindForward, damit das einfach ordentlicher aussieht.
Das macht man, wie folgt:

- KeyBinding KeyW = mc.gameSettings.keyBindForward;

Und dann nur noch in deinen drawRect oder wo auch immer du das benötigst, diesen int animate an diese Stelle schreiben, wo du dein Width oder Height initialisierst. Das habe ich so gemacht:

- RenderHelper.drawFullCircle(GuiScreen.width - 39, GuiScreen.height - 60, check ? 8 + animate : 10, color);

In dem Falle benutzte ich das nicht beim Width oder Height, sondern bei der Größe des Kreises. Und nun zu deinem Beispiel:
Wenn man z.b. die Animation haben will, dass die Liste / der Rect mit den Modulen "reinfährt", muss man einfach nur so eine Animation erstellen und das wird, dann halt nicht das Limit 2 beinhalten aber vom Grundgerüst her müsste es gleich sein.

Hoffe, ich konnte dir damit helfen, falls ich etwas falsch erklärt habe, bitte nicht gleich beleidigen, sondern am besten mir den Fehler schreiben damit ich ihn korrigieren kann. Natürlich hoffe ich auch das ich es recht Einsteiger freundlich gemacht habe. Viel Erfolg ^^
Danke, so meinte ich das aber nicht ich meinte eher sowas:
also wenn ich das Panel extende kommt diese Animation.
 
1. Brauchst du dafür Opengl, nicht wie die anderen hier behaupten
2. Um genau zu werden nutzt Dize in dem Video Scissorboxen
-> Scissboxen schneiden (wie der name schon sagt) eine stelle aus deinem bildschirm weg, wenn du die scissorbox also von einer Seite langsam verkleinerst sieht das aus wie eine Animation
3. Wie macht man eine Animation?
-> 3.1 Simpelste lösung wäre es ein int/double/float.... in einem update event je nach gegebenheiten zu vergrößern oder zu verkleinern was aber viele nachteile mit sich zieht (bsp: leute mit wenig fps haben langsame animations
-> 3.2 Du hookst das Tick event von mc und machst das selbe mit dem int /double/float nur das du dann unabhängig von den Fps bist und schon hast du deine animation zumindest semi perfekt
4. Du interpolatest deine animation um sie so smooth wie möglich zu machen was sie einfach ungemein besser aussehen lässt
5. Die richtig krassen ficker machen dann noch, nicht wie wir lineare, sondern andere Animationarten (animation kommt erst langsam und wird schneller oä)
 
In dem Falle benutzte ich das nicht beim Width oder Height, sondern bei der Größe des Kreises. Und nun zu deinem Beispiel:
Wenn man z.b. die Animation haben will, dass die Liste / der Rect mit den Modulen "reinfährt", muss man einfach nur so eine Animation erstellen und das wird, dann halt nicht das Limit 2 beinhalten aber vom Grundgerüst her müsste es gleich sein.
lol aber meinte ja könnt mich gerne berichtigen
 
1. Brauchst du dafür Opengl, nicht wie die anderen hier behaupten
2. Um genau zu werden nutzt Dize in dem Video Scissorboxen
-> Scissboxen schneiden (wie der name schon sagt) eine stelle aus deinem bildschirm weg, wenn du die scissorbox also von einer Seite langsam verkleinerst sieht das aus wie eine Animation
3. Wie macht man eine Animation?
-> 3.1 Simpelste lösung wäre es ein int/double/float.... in einem update event je nach gegebenheiten zu vergrößern oder zu verkleinern was aber viele nachteile mit sich zieht (bsp: leute mit wenig fps haben langsame animations
-> 3.2 Du hookst das Tick event von mc und machst das selbe mit dem int /double/float nur das du dann unabhängig von den Fps bist und schon hast du deine animation zumindest semi perfekt
4. Du interpolatest deine animation um sie so smooth wie möglich zu machen was sie einfach ungemein besser aussehen lässt
5. Die richtig krassen ficker machen dann noch, nicht wie wir lineare, sondern andere Animationarten (animation kommt erst langsam und wird schneller oä)
dankee
 
shape1
shape2
shape3
shape4
shape5
shape6
Back
Top