Sind die Minecraft-Animationen im Spiel fest programmiert? [geschlossen]

12

Ich würde gerne wissen, wie das Animationssystem in Minecraft funktioniert. Ich habe das Gefühl, dass alle Mobs fest im Spiel verankert sind. Hat Notch wirklich da gesessen und die Matrizen für alle Animationsknochen von Hand erstellt?

Ich mag es, Spiele zum Spaß nachzubauen, also würde ich gerne wissen, wie er das gemacht hat. Auch wenn er sie wirklich hart codiert ... gibt es einen besseren Weg?

Radenon
quelle
2
warum glaubst du, hat er vielleicht hardcodierte animationen?
Ali1S232
Scheint, als ob diese Frage nur von Notch beantwortet werden kann.
MichaelHouse
9
Mehr auf den Punkt, warum interessiert es dich, wie Minecraft es getan hat? Haben Sie eine Idee, wie Sie dasselbe auf andere Weise erreichen können?
Tetrad
1
minecraftforum.net/topic/361430-181smp-smart-moving Der Hersteller dieses Mods hat vielleicht eine Antwort für Sie, aber Animation ist kein Bereich des Minecraft-Codes, den ich vorher durchgesehen habe.
James
1
Ich habe den MCP-Code bereits durchgesehen und bin mir zu 99% sicher, dass ich die fest codierten Animationen noch gesehen habe. Ich muss Minecraft (oder sogar Eclipse) nicht mehr überprüfen.
BlueRaja - Danny Pflughoeft

Antworten:

18

Wie andere schon gesagt haben, sind sowohl die Modelle als auch die Animationen hartcodiert. Wenn Sie sehen möchten, wie dies gemacht wurde, besuchen Sie das Minecraft Coder Pack- Wiki.

Das Paket wurde erstellt, um Mod-Erstellern zu helfen, die Minecraft-Klassen zu dekompilieren, zu ändern und neu zu kompilieren. Anweisungen finden Sie in den mit dem Paket gelieferten Readme-Dateien. Das Paket enthält Skripte zum Dekompilieren, Neukompilieren und erneuten Verschleiern des Spiels und des Servers.

Die Klassen, die Sie betrachten möchten, sind: ModelBase, ModelBiped und ModelRenderer.

ModelBiped enthält die folgenden Funktionen, die die humanoiden Animationen ausführen:

public void render(Entity entity, float time, float f1, ...)
{
    setRotationAngles(time, f1, ...);
    ...
}

public void setRotationAngles(float time, float f1, ...)
{
    ...
    bipedRightArm.rotateAngleX = MathHelper.cos(time * 0.6662F + 3.141593F) * 2.0F * f1 * 0.5F;
    bipedLeftArm.rotateAngleX = MathHelper.cos(time * 0.6662F) * 2.0F * f1 * 0.5F;
    ...
}

Die Armschwingen sind einfach Kosinusfunktionen. Der rechte Arm wird von PI versetzt, um sie in entgegengesetzte Richtungen schwingen zu lassen.

Grafik der Armschwingungen

Ich hoffe das beantwortet deine frage =)


Wenn Sie weitere Informationen darüber wünschen, wie Minecraft tatsächlich modifiziert wird, dann sehen Sie sich diese Frage an:

Wie füge ich Minecraft einen benutzerdefinierten Mob hinzu?

Zfedoran
quelle
Schwester! Euklidische Rotation :(.
Jonathan Dickinson
8

Modelle in Minecraft sind fest codiert. Es gibt keine Vorstellung von Blockhierarchie (nur eine Liste von Blöcken). Dies bedeutet, dass Animationen entweder prozedural (auf sehr einfache Weise) oder durch Interpolation fest codierte Werte ausgeführt werden.

Es gibt einige Editoren für Minecraft-Modelle wie Techne oder FMCModeler, mit denen Minecraft-Modellcode für Mods importiert / exportiert werden kann. Sie unterstützen jedoch keine Animationen, da diese wahrscheinlich für jedes Modell unterschiedlich gehandhabt werden.

Hier ist ein kurzes Beispiel, das mit FMCModeler erstellt wurde:

//variables init:
public ModelRenderer box;

//constructor:
box = new ModelRenderer(0, 0);
box.addBox(0F, 0F, 0F, 16, 16, 16);

//render:
box.render(f5);

Besser wäre es, einen vollständigen blockbasierten Modellierer mit einigen Begriffen der Blockhierarchie zu erstellen, damit Sie die Modelle mit Keyframes und Interpolation animieren können.

Derzeit baue ich ein Multiplayer-Tool zum Erstellen von Spielen, das genau das tut (unter anderem http://craftstud.io/ ). Es ermöglicht bereits das Erstellen komplexer statischer strukturierter Modelle und weitere sind in Vorbereitung.

Hier ist ein komplexes Modell, das mit CraftStudio erstellt wurde. Wie Sie sehen, sind die Blöcke in einem Baum auf der rechten Seite angeordnet: http://i.stack.imgur.com/FRQeV.png

Jeder Block wird mit den folgenden Daten auf Platte / über das Netzwerk serialisiert:

  • Eindeutige ID
  • ID des übergeordneten Knotens
  • Position (betrifft Nachkommen)
  • Skalieren (betrifft Nachkommen)
  • Winkel (betrifft Nachkommen)
  • Versatz vom Drehpunkt
  • Block Größe
  • Blocktexturoffset (UV-Koordinatenoffset für die Texturierung)

Ich plane, Animationsunterstützung hinzuzufügen, indem ich eine Karte mit Animationsnamen als Schlüssel und eine Liste von Schlüsselbildern als Wert speichere. Jeder Keyframe wird mit einem Block und einem zu animierenden Wert verknüpft. Zwischen Keyframes sollten Werte interpoliert werden (entweder linear nach Position oder sphärisch nach Winkeln, Suche nach Lerp und Slerp).

Elisée
quelle
0

Minecraft-Blockmodelle sind ab Version 1.8 nicht mehr fest im Spiel codiert und können mithilfe von Ressourcenpaketen bearbeitet werden. Das JSON-Modellierungssystem ist recht einfach zu verstehen und es gibt Modelle unter / models / block. Anschließend können Sie anhand des Codes feststellen, wie die JSON-Modelle interpretiert werden.

Tubular
quelle