Open corayana opened 2 years ago
Ich habe jetzt ausprobiert, die Posen im vorhinein einmal alle komplett (wenn vorhanden) zu laden. Mit folgender Funktion in Main.ts funktioniert der Posenwechsel nun problemlos in allen Szenen.
Object.keys(characters).forEach(characterName => {
if (typeof characters[characterName].pose !== "undefined") {
Object.keys(characters[characterName].pose).forEach(characterPose => {
ƒS.Character.get(characters[characterName]).getPose(characters[characterName].pose[characterPose]);
}
}
});
VSC beschwert sich jetzt mit einigen Errors wegen der types, aber es funktioniert immerhin. Keine Ahnung, ob das für die Abgabe okay ist und damit mein Issue vorerst "geklärt" wäre - eine bessere Lösung (ohne ERRORs) wäre auf jeden Fall wünschenswert. Wäre auf jeden Fall cool, wenn das initiale Laden der Posen direkt über FUDGE geschehen würde. :)
Es ist sicher so, dass die Bilder erst geladen werden, wenn sie gebraucht werden. Es gibt noch keine Preload-Funktionalität, die hast Du jetzt gebastelt. Wir lassen den Issue einmal offen, dann können wir das bei Gelegenheit einmal übernehmen.
Was passiert eigentlich, wenn du (ohne Preload) in deinem ersten Ansatz das hide
einfach weglässt?
Ohne hide
werden die Posen einfach übereinander gelegt. Das sieht schnell sehr komisch aus :D
Mach' mal so rum
export async function changePose(character: ƒS.CharacterDefinition, pose: string, position: ƒ.Vector2) {
await ƒS.Character.show(character, character.pose[pose], position);
await ƒS.Character.hide(character);
await ƒS.Character.hide(character);
await ƒS.Character.show(character, character.pose[pose], position);
await ƒS.update(0.2);
};
Das ist aber nur ein Workaround. Wenn ich drüber nachdenke stellt, sich die Frage ob es überhaupt sein soll, dass ein Charakter mehrfach erscheint.
@Rina14: hatten wir uns etwas dabei gedacht?
Mach' mal so rum
export async function changePose(character: ƒS.CharacterDefinition, pose: string, position: ƒ.Vector2) { await ƒS.Character.show(character, character.pose[pose], position); await ƒS.Character.hide(character); await ƒS.Character.hide(character); await ƒS.Character.show(character, character.pose[pose], position); await ƒS.update(0.2); };
Wieso 2x hide()
? Mit hide()
verschwindet der ganze Character und damit auch alle Posen?
Aber an sich sollte das funktionieren.
Ich habe jetzt ausprobiert, die Posen im vorhinein einmal alle komplett (wenn vorhanden) zu laden. Mit folgender Funktion in Main.ts funktioniert der Posenwechsel nun problemlos in allen Szenen.
Object.keys(characters).forEach(characterName => { if (typeof characters[characterName].pose !== "undefined") { Object.keys(characters[characterName].pose).forEach(characterPose => { ƒS.Character.get(characters[characterName]).getPose(characters[characterName].pose[characterPose]); } } });
VSC beschwert sich jetzt mit einigen Errors wegen der types, aber es funktioniert immerhin. Keine Ahnung, ob das für die Abgabe okay ist und damit mein Issue vorerst "geklärt" wäre - eine bessere Lösung (ohne ERRORs) wäre auf jeden Fall wünschenswert. Wäre auf jeden Fall cool, wenn das initiale Laden der Posen direkt über FUDGE geschehen würde. :)
Inzwischen konnte ich die type-Errors umgehen, indem ich in der Character Definition den type festgelegt habe. Ist auch nur ein Workaround aber vlt etwas performanter, alle Posen in Main am Anfang zu laden?
Mich interessiert es schon, ob mein Workaround oben funktioniert. Zweimal hide, weil mit dem ersten show ein zweiter Charakter erscheint und beide wegmüssen.
Habs gerade ausprobiert, das funktioniert auch.
Das ist aber nur ein Workaround. Wenn ich drüber nachdenke stellt, sich die Frage ob es überhaupt sein soll, dass ein Charakter mehrfach erscheint.
@Rina14: hatten wir uns etwas dabei gedacht?
@Rina14 : bitte mal antworten, dann könnte ich das auch anders machen, falls es keinen sinnvollen Grund gibt...
Das ist aber nur ein Workaround. Wenn ich drüber nachdenke stellt, sich die Frage ob es überhaupt sein soll, dass ein Charakter mehrfach erscheint. @Rina14: hatten wir uns etwas dabei gedacht?
@Rina14 : bitte mal antworten, dann könnte ich das auch anders machen, falls es keinen sinnvollen Grund gibt...
@JirkaDellOro Mit mehrfach erscheinen meinst Du jetzt schon, ein- und denselben Charakter mit selbiger Pose? Ja, ich meine, dass es im letzten Semester die Anfrage gab, ob das ginge und es war auch gewünscht.
Das erscheint mir eher wie ein absoluter Sonderfall und dieser sollte ggf. anders gelöst sein. Mir scheint es intuitiv und erwartbar, dass
await ƒS.Character.show(character, character.pose[pose], position);
bewirkt, dass die Figur character ein andere Pose einnimmt und nicht ein Double erscheint.
Man kann für diesen Sonderfall einen zweiten Charakter mit den gleichen Posen erschaffen, oder?
Ich habe recht viele verschiedene Posen für meine Charactere. Um diese häufig wechseln zu können, hab ich mir folgende Funktion geschrieben:
-> zu finden hier ganz unten
Leider ist das Ändern einer Pose trotz dieser Funktion nicht konsistent. Teilweise ist die Änderung einer Pose flüssig und schön, teilweise "springt" sie, also kurz ist quasi nichts zu sehen.
Ich konnte leider nicht herausfinden, nach welchem Muster das schief geht. Deshalb kann ich auch keine garantierte Code-Stelle verlinken. Meine vage Vermutung ist, dass zuvor noch nicht genutzte Posen "neu geladen" werden müssen und für die Verzögerung sorgen könnten.
Meine Visual Novel Meine Szenen Die Intro Szene