Rotieren von mehreren Objekten

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
  • Guten Abend,
    ich habe vor mehrer selbstgemappte Objekte zu einer anderen Position zu verschieben und die Rotation der Z-Achse zu ändern.
    Jedoch ist das Ergebnis nicht ganz so wie erwartet:
    Gibt es eine Möglichkeit die Rotation der ganzen Objekte so zu ändern das es aussieht wie vorher also die Abstände stimmen?


    Mein Code:
    for(new x = 0; x < 100; x++)
    {
    GetDynamicObjectRot(MovableObject[x],PX,PY,PZ);
    SetDynamicObjectRot(MovableObject[x],PX,PY,PZ-90);
    }

  • hab da etwas ganz altes rausgekramt:
    TurnAroundPoint( Float:turn_around_x, Float:turn_around_y, Float:cur_x, Float:cur_y, Float:t_degrees, &Float:ret_newx, &Float:ret_newy ) // by D0erf|er
    {
    // new x pos cos(degrees)*vector_x - sin(degrees)*vector_y + turn_around_x
    ret_newx=(floatcos(t_degrees, degrees)*(cur_x-turn_around_x))-(floatsin(t_degrees, degrees)*(cur_y-turn_around_y))+turn_around_x;
    // new y pos sin(degrees)*vector_x + cos(degrees)*vector_y + turn_around_y
    ret_newy=(floatsin(t_degrees, degrees)*(cur_x-turn_around_x))+(floatcos(t_degrees, degrees)*(cur_y-turn_around_y))+turn_around_y;
    return 1;
    }
    ein wenig Mathe :)


    turn_around_x & turn_around_y: um diesen Punkt wird gedreht
    cur_x & cur_y: das Objekt Position die gedreht werden soll
    t_degrees: um wie viel Grad gedreht werden soll
    ret_newx & ret_newy: die neue Position


    Anwendung:

    // Beispiel Objekt: CreateObject(1234, 1000.0, 2000.0 , 3000.0, 0.0, 0.0, 0.0);
    new Float:neues_X, Float:neues_Y;
    TurnAroundPoint( 0.0, 0.0, 1000.0, 2000.0, 90.0, neues_X, neues_Y ); // 0.0, 0.0 = Der Punkt um den gedreht wird || 1000.0, 2000.0 = Die Position des Beispiel Objektes || 90.0 = Drehung um 90 Grad || neues_X, neues_Y = Die neue Position


    So wie du es benötigst:
    Du ersetzt alle "CreateObject" mit "CreateObjectYO" und setzt die 3 define-Werte so wie du sie brauchst, anschließend startest du den Server und schon hast du die neue Map in deiner server_log.txt (nur noch raus kopieren und in den Server einfügen)

    #define TURN_AROUND_x 0.0
    #define TURN_AROUND_y 0.0
    #define TURN_Rotation 90.0
    stock CreateObjectYO(mid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
    {
    new Float:neues_X, Float:neues_Y;
    TurnAroundPoint( TURN_AROUND_x, TURN_AROUND_y, x, y, TURN_Rotation, neues_X, neues_Y );
    printf("CreateObject(%d, %f, %f, %f, %f, %f, %f);", mid, neues_X, neues_Y, z, rx, ry, rz+TURN_Rotation);
    }