Backwards animation
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
Backwards animation
Für mein Zahnradrätsel muss ich die Räder natürlich animieren. Für die animation reicht ein Loop natürlich nicht.
Jetzt hab ich das Problem, dass beim rückwärtsanimieren nur bei der ersten Animation alle Loops benutzt werden. Wiederholt sich die Animation (mit Repeat) dann wird nur noch der letzte Loop benutzt. Lässt sich da irgendwas machen?
Jetzt hab ich das Problem, dass beim rückwärtsanimieren nur bei der ersten Animation alle Loops benutzt werden. Wiederholt sich die Animation (mit Repeat) dann wird nur noch der letzte Loop benutzt. Lässt sich da irgendwas machen?
Danke, Adventuretreff! <3
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Einen Array anlegen, der die Nummern der Sprites enthält, dann mit Object.Graphic, Wait() und einer while-Schleife selbst animieren.
Andere Möglichkeit:
Du nimmst eine zweite View für die Rückwärtsanimation. D.h. statt mit eBackwards animierst Du normal vorwärts, aber die Sprites sind in der umgekehrten Reihenfolge in den Loops der View.
Andere Möglichkeit:
Du nimmst eine zweite View für die Rückwärtsanimation. D.h. statt mit eBackwards animierst Du normal vorwärts, aber die Sprites sind in der umgekehrten Reihenfolge in den Loops der View.
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Ich dachte mir schon, dass die Frage kommt
Anhalten wäre möglich, z.B. so:
Ab da weiterlaufen lassen ist aber nur mit .Animate nicht möglich.
Ich würde es wirklich von Hand animieren.
Anhalten wäre möglich, z.B. so:
Code: Alles auswählen
int stop_at=-1;
// rep_ex
if (stop_at>0 && rad1.Frame==stop_at) rad1.StopAnimating();
...
stop_at=6;
rad1.Animate(...);
Ich würde es wirklich von Hand animieren.
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
also für 12 aufeinanderfolgende sprites schreib ich dannkhrismuc hat geschrieben:Einen Array anlegen, der die Nummern der Sprites enthält, dann mit Object.Graphic, Wait() und einer while-Schleife selbst animieren.
int sprite[12]
oder?
Was hat das wait damit zu tun, nach jeder Bildweiterbewegung x Loops warten oder was?
Danke, Adventuretreff! <3
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Du musst einfach alle Zahnräder drehen, bevor Du Wait() aufrufst.
Wenn Du jetzt raeder_drehen aufrufst, drehen sich alle Zahnräder einen Zahn weiter. Die Schleife, die die Räder dreht, ruft abwechselnd die Funktion und Wait(x); auf.
Elegant wäre es natürlich, wenn w mit der Zeit größer wird, sodass die Drehung sich verlangsamt (Schwung läßt nach).
Code: Alles auswählen
// script header
struct radstruct {
int sprite[50]; // spritenummern
int pos; // position
int zaehne; // anzahl zähne
}
// global script
radstruct rad[5];
function init_raeder() {
int r=1;
int c;
rad[1].zaehne=6; rad[1].pos=1;
rad[2].zaehne=10; rad[2].pos=Random(5)+2;
...
while(r<=4) { // vier Räder
c=1;
while(c<=rad[r].zaehne) {
if (r==1) rad[r].sprite[c]=120+c; // rad 1: sprites 121-126
if (r==2) rad[r].sprite[c]=127+c; // rad 2: sprites 127-136
...
c++;
}
r++;
}
}
function rad_drehen(int r, bool rechts) {
if (rechts) rad[r].pos++;
else rad[r].pos--;
if (rad[r].pos==0) rad[r].pos=rad[r].zaehne;
if (rad[r].pos==rad[r].zaehne+1) rad[r].pos=1;
object[r].Graphic=rad[r].sprite[rad[r].pos]; // rad1=object1, usw.
}
function raeder_drehen() {
rad_drehen(1, true);
rad_drehen(2, false);
rad_drehen(3, true);
rad_drehen(4, false);
}
// gamestart
init_raeder();
Elegant wäre es natürlich, wenn w mit der Zeit größer wird, sodass die Drehung sich verlangsamt (Schwung läßt nach).
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Vier Räder sollte nur erklären, dass die äußere Schleife deswegen viermal durchlaufen wird (r<=4), wenn Du mehr Zahnräder hast, musst Du die entsprechende Anzahl dort eintragen.
An die Startposition hab ich nicht gedacht, stimmt, das kann auf blöd unlösbar werden.
Füg das ein, nachdem alle rad[x].zaehne definiert wurden:
Dazu musst Du die init_raeder() unter die raeder_drehen() verschieben.
An die Startposition hab ich nicht gedacht, stimmt, das kann auf blöd unlösbar werden.
Füg das ein, nachdem alle rad[x].zaehne definiert wurden:
Code: Alles auswählen
rad[1].pos=1; // alles auf Lösungsposition
rad[2].pos=1;
rad[3].pos=1;
...
int t=Random(50)+20; // 140-190 Zähne zur Lösung
while(r<=t) {
raeder_drehen();
r++;
}
r=1;
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55