Problem MoveObject rotz

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Nein, nur der Timer wird in Millisekunden angegeben, die Geschwindigkeit ist nur eine Zahl relativ zur Distanz die zurückgelegt wird.
    Wenn du einen Befehl machen willst für beides, dann mache für beide eine globale Variable (unter den Includes das new) und mache einen /timer Befehl, mit dessen "params" du dann die Zeit des Timers steuerst (die 750), und einen Befehl /geschwindigkeit, mit dessen "params" du dann als Float die Geschwindigkeit steuerst.
    (strval & floatstr)


    Dann beim Timer die 750 mit der Variable ersetzen und das OBJECT_SPEED mit der anderen Variable ersetzen (OBJECT_SPEED kannst du keinen variablen Wert zuweisen, das ist ja eine Konstante, daher eine Variable (new...) anlegen).

  • Ich bin ehrlich gesagt zu dumm dafür


    Kannst du mir ein Beispiel Befehl schreiben?


    Ich danke dir jetzt schonmal für alles

  • Unter die Includes:
    new testTime = 750;
    new Float:testSpeed = 0.001;



    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, testSpeed, 0.00000, 0.00000, 180.0), objpos = 1;
    case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.02, testSpeed, 0.00000, 0.00000, 270.0), objpos = 2;
    case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.03, testSpeed, 0.00000, 0.00000, 0.0), objpos = 3;
    case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.04, testSpeed, 0.00000, 0.00000, 90.0), objpos = 0;
    }
    SetTimerEx("TurnObject", testTime, 0, "dd", dBoden, objpos);
    }
    return 1;
    }


    Die Befehle:
    ocmd:timer(playerid, params[])
    {
    if(!strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "/timer [Zeit in ms]");
    if(strval(params) < 100) return SendClientMessage(playerid, 0xFF0000FF, "Zu klein!");
    testTime = strval(params);
    new str[145];
    format(str, sizeof(str), "Zeit: %dms", testTime);
    SendClientMessage(playerid, 0xFFFF00FF, str);
    return 1;
    }
    ocmd:geschw(playerid, params[])
    {
    if(!strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "/geschw [Geschwindigkeit]");
    if(floatstr(params) <= 0.0) return SendClientMessage(playerid, 0xFF0000FF, "Zu klein!");
    testSpeed = floatstr(params);
    new str[145];
    format(str, sizeof(str), "Geschwindigkeit: %fms", testSpeed);
    SendClientMessage(playerid, 0xFFFF00FF, str);
    return 1;
    }


    In der Ausgabe steht dann jeweils der Wert, den musst du dann wieder an Stelle der Variablen im Code schreiben, wenn es passt.

  • Beitrag von Dr._Darius ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • case 0: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.003, testSpeed, 0.00000, 0.00000, 180.0), objpos = 1;
    case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.004, testSpeed, 0.00000, 0.00000, 270.0), objpos = 2;
    case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.001, testSpeed, 0.00000, 0.00000, 0.0), objpos = 3;
    case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.002, testSpeed, 0.00000, 0.00000, 90.0),objpos = 0;


    Damit haut etwas nicht hin, weil es fangt dann an zu scratchen

  • Da geht es nicht er springt dann immer auf die Ausgangsposition zurück

  • Das Objekt ist ja riesig.
    Schreibe es so:
    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, testSpeed, 0.00000, 0.00000, 180.0), objpos = 1;
    case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000-0.01, testSpeed, 0.00000, 0.00000, 270.0), objpos = 2;
    case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.01, testSpeed, 0.00000, 0.00000, 0.0), objpos = 3;
    case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000-0.01, testSpeed, 0.00000, 0.00000, 90.0), objpos = 0;
    }
    SetTimerEx("TurnObject", testTime, 0, "dd", dBoden, objpos);
    }
    return 1;
    }


    Und dann setze per Befehl den Timer auf ~8000, da sieht es ziemlich gut aus. 750ms war viel zu wenig. Die Zeit ist ja die Zeit, die das Objekt braucht um eine viertel Drehung zu machen. Das musst du eben genau messen, oder abschätzen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen