Hey Leute, ich habe folgendes Problem
Ich möchte das sich ein Object eine Umdrehung 360° an der z Rotation dauerhaft dreht.
Wie kann ich es möglich machen?
Hey Leute, ich habe folgendes Problem
Ich möchte das sich ein Object eine Umdrehung 360° an der z Rotation dauerhaft dreht.
Wie kann ich es möglich machen?
Der Code wäre hilfreich ?
Wozu einen Code ? Er fragt wie das allgemein geht!
Hier mal der Code
forward TurnObject(objectid, objpos);
public TurnObject(objectid, objpos)
{
if(objectid == dBoden)
{
switch(objpos)
{
case 0: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000, OBJECT_SPEED, 0.00000, 0.00000, 180.0), objpos = 1;
case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000, OBJECT_SPEED, 0.00000, 0.00000, 270.0), objpos = 2;
case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000, OBJECT_SPEED, 0.00000, 0.00000, 360.0), objpos = 3;
case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000, OBJECT_SPEED, 0.00000, 0.00000, 90.0), objpos = 0;
}
SetTimerEx("TurnObject", 750, 0, "dd", dBoden, objpos);
}
return 1;
}
Alles anzeigen
Problem ist nur das er das nicht langsam macht sondern ruckartig auf die nächste Koordinate geht
OBJECT_SPEED
Welchen Wert hat denn diese Variable / Define?
#define OBJECT_SPEED 0.01
Hat er weniger etwas damit zu tun, das Problem ist, das der Timer nur für X Y Z funktioniert aber nicht für Rot X Rot Y und Rot Z
aber nicht für Rot X Rot Y und Rot Z
Ja, weil die Geschwindigkeit zu hoch ist.
Mach es mal auf: 0.0001
Und sind die X,Y,Z Koordinaten bei dem MoveObject exakt die selben wie von dem Objekt? Denn du musst es mindestens um 0.0001 in irgendeine Richtung verschieben
mfg.
Habe ich gemacht, aber es hat sich nichts geändert hier der Quellcode
forward TurnObject(objectid, objpos);
public TurnObject(objectid, objpos)
{
if(objectid == dBoden)
{
switch(objpos)
{
case 0: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.0001, OBJECT_SPEED, 0.00000, 0.00000, 180.0), objpos = 1;
case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.0001, OBJECT_SPEED, 0.00000, 0.00000, 270.0), objpos = 2;
case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.0001, OBJECT_SPEED, 0.00000, 0.00000, 360.0), objpos = 3;
case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.0001, OBJECT_SPEED, 0.00000, 0.00000, 90.0), objpos = 0;
}
SetTimerEx("TurnObject", 750, 0, "dd", dBoden, objpos);
}
return 1;
}
Alles anzeigen
Du hast bei allen 227.06000+0.0001 gemacht, das kommt immer wieder aufs gleiche raus. Mache einmal 0.0001, einmal 0.0002, usw...
Leider funktioniert das nicht.
Jeffry:
Das steht unter OnGameModInit
dBoden =CreateObject(13607, 1478.07996, -1799.66003, 227.06000, 0.00000, 0.00000, 0.00000);
MoveObject(dBoden,1478.07996, -1799.66003, 227.06000, 0.00000, 0.00000, 90.00000);
SetTimerEx("TurnObject", 750, 0, "dd", dBoden, 0);
forward TurnObject(objectid, objpos);
public TurnObject(objectid, objpos)
{
if(objectid == dBoden)
{
switch(objpos)
{
case 0: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.0001, OBJECT_SPEED, 0.00000, 0.00000, 0.0), objpos = 1;
case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.0002, OBJECT_SPEED, 0.00000, 0.00000, 120.0), objpos = 2;
case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.0003, OBJECT_SPEED, 0.00000, 0.00000, 240.0), objpos = 3;
case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.0004, OBJECT_SPEED, 0.00000, 0.00000, 360.0), objpos = 0;
}
SetTimerEx("TurnObject", 750, 0, "dd", dBoden, objpos);
}
return 1;
}
Alles anzeigen
dBoden =CreateObject(13607, 1478.07996, -1799.66003, 227.06000, 0.00000, 0.00000, 0.00000);
MoveObject(dBoden,1478.07996, -1799.66003, 227.06000, 0.00000, 0.00000, 90.00000);
SetTimerEx("TurnObject", 750, 0, "dd", dBoden, 0);
Das MoveObject da mach mal zu:
MoveObject(dBoden,1478.07996, -1799.66003, 227.06000, OBJECT_SPEED, 0.00000, 0.00000, 90.00000);
mfg.
ändert leider nichts an der Situation.
Folgender Effekt dritt auf.
Der Boden dreht sich wie eine Schallplatte die gerade von einem DJ gescratcht wird. Es macht keine 360° drehung
Und genau das habe ich verwendet. aber funktioniert trotzdem nicht
Du hattest bei der Drehung zwei mal 360/0 Grad stehen, und es waren keine 90'er Sprünge.
Teste es so:
dBoden =CreateObject(13607, 1478.07996, -1799.66003, 227.06000, 0.00000, 0.00000, 0.00000);
MoveObject(dBoden,1478.07996, -1799.661, 227.06000, OBJECT_SPEED, 0.00000, 0.00000, 90.00000);
SetTimerEx("TurnObject", 750, 0, "dd", dBoden, 0);
forward TurnObject(objectid, objpos);
public TurnObject(objectid, objpos)
{
if(objectid == dBoden)
{
switch(objpos)
{
case 0: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.01, OBJECT_SPEED, 0.00000, 0.00000, 180.0), objpos = 1;
case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.02, OBJECT_SPEED, 0.00000, 0.00000, 270.0), objpos = 2;
case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.03, OBJECT_SPEED, 0.00000, 0.00000, 0.0), objpos = 3;
case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.04, OBJECT_SPEED, 0.00000, 0.00000, 90.0), objpos = 0;
}
SetTimerEx("TurnObject", 750, 0, "dd", dBoden, objpos);
}
return 1;
}
Mit OBJECT_SPEED als 0.001.
SO es Funktioniert alles, jedoch möchte ich noch das es sich langsam dreht und und flüssig(kleine Rückler sind ok)
Dann musst du die Zeit des Timers erhöhen und die Geschwindigkeit verkleinern. So anpassen, dass es für deine Vorstellungen passt.
Ein Beispiel wäre Super, Weil ich im Script 2 mal SettimerEx habe.
Was ich mir Vorstell in 30 min =360°
Naja, du machst hier die 750 größer:
SetTimerEx("TurnObject", 750, 0, "dd", dBoden, objpos);
zu:
SetTimerEx("TurnObject", 1500, 0, "dd", dBoden, objpos);
Und OBJECT_SPEED machst du kleiner, zu 0.0005.
=> Somit wäre der Timer verdoppelt und die Geschwindigkeit halbiert.
Musst es eben so anpassen wie es dir von der Geschwindigkeit her dann gefällt. Timer immer in Relation zur Geschwindigkeit anpassen. Genau kann ich es dir so nicht sagen, welche Zahlen du nehmen musst, ich habe damals auch dutzende Versuche gebraucht, bis es gepasst hat. Das ist eben eine Probiererei.
Werden beide in Millisekunden angeben? d.h Speed und SettimerEx?
Ein Befehl wäre dafür am besten
für Speed und den Timer