Problem mit Textdraws

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 Tag liebe Community,


    ich versuche seit Gestern anklickbare Textdraws zu machen der hover funktioniert aber das klicken nicht wieso auch immer :(
    eine New Variable mit mehreren ',':
    ,PlayerText:Login[MAX_PLAYERS][28]


    Unter OnPlayerConnect:
    LoadLoginSkoam(playerid);


    unter SetConnect:
    public SetConnect(playerid)
    {
    if(IsPlayerNPC(playerid))return 1;
    SpamChat(playerid,false);
    for(new i=0;i<69;i++){ PlayerTextDrawShow(playerid,Login[playerid][i]); }
    new randcam = random(sizeof(ConnectScreens));
    SetPlayerPos(playerid,ConnectScreens[randcam][9],ConnectScreens[randcam][10],ConnectScreens[randcam][11]);
    InterpolateCameraPos(playerid,ConnectScreens[randcam][0],ConnectScreens[randcam][1],ConnectScreens[randcam][2],ConnectScreens[randcam][3],ConnectScreens[randcam][4],ConnectScreens[randcam][5],60000,CAMERA_MOVE);
    InterpolateCameraLookAt(playerid,ConnectScreens[randcam][6],ConnectScreens[randcam][7],ConnectScreens[randcam][8],ConnectScreens[randcam][9],ConnectScreens[randcam][10],ConnectScreens[randcam][11],60000,CAMERA_MOVE);
    CheckBannedUser(playerid);
    SetTimerEx("AuswahlAnzeigen",5000,0,"i",playerid);
    return 1;
    }


    Der Lade Stock:
    Login[playerid][7] = CreatePlayerTextDraw(playerid, 541.333312, 139.392547, "Einloggen");
    PlayerTextDrawLetterSize(playerid, Login[playerid][7], 0.400000, 1.600000);
    PlayerTextDrawAlignment(playerid, Login[playerid][7], 1);
    PlayerTextDrawColor(playerid, Login[playerid][7], -1);
    PlayerTextDrawSetShadow(playerid, Login[playerid][7], 0);
    PlayerTextDrawSetOutline(playerid, Login[playerid][7], 0);
    PlayerTextDrawBackgroundColor(playerid, Login[playerid][7], 255);
    PlayerTextDrawFont(playerid, Login[playerid][7], 3);
    PlayerTextDrawSetProportional(playerid, Login[playerid][7], 1);
    PlayerTextDrawSetShadow(playerid, Login[playerid][7], 0);
    PlayerTextDrawSetSelectable(playerid, Login[playerid][7], true);


    Login[playerid][8] = CreatePlayerTextDraw(playerid, 541.333251, 173.822174, "Registrieren");
    PlayerTextDrawLetterSize(playerid, Login[playerid][8], 0.400000, 1.600000);
    PlayerTextDrawAlignment(playerid, Login[playerid][8], 1);
    PlayerTextDrawColor(playerid, Login[playerid][8], -1);
    PlayerTextDrawSetShadow(playerid, Login[playerid][8], 0);
    PlayerTextDrawSetOutline(playerid, Login[playerid][8], 0);
    PlayerTextDrawBackgroundColor(playerid, Login[playerid][8], 255);
    PlayerTextDrawFont(playerid, Login[playerid][8], 3);
    PlayerTextDrawSetProportional(playerid, Login[playerid][8], 1);
    PlayerTextDrawSetShadow(playerid, Login[playerid][8], 0);
    PlayerTextDrawSetSelectable(playerid, Login[playerid][8], true);



    Server-Log meldung nach der Ausführung von SetConnect:

    Code
    [00:56:34] [debug] Run time error 4: "Array index out of bounds"
    [00:56:34] [debug]   Accessing element at index 28 past array upper bound 27
    [00:56:34] [debug] Backtrace (most recent call first):
    [00:56:34] [debug] #0  001eedd0 in SetConnect () from ********.amx


    Ich hoffe auf hilfe, danke.


    Liebe Grüße,
    Skoam

  • for(new i=0;i<69;i++){ PlayerTextDrawShow(playerid,Login[playerid][i]); }
    zu:
    for(new i=0;i<28;i++){ PlayerTextDrawShow(playerid,Login[playerid][i]); }



    Zwecks dem anklickbaren Bereich:
    Du musst die Größe das anklickbaren Bereiches mit TextDrawTextSize anpassen.
    https://wiki.sa-mp.com/wiki/TextDrawTextSize_DE


    Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches.
    Der Y Wert ist die geschätzte Höhe.

  • Das musst du abschätzen. Die X Größe kannst du mit einer Box bestimmen, das würdest du noch sehen, die Y Größe kannst du so aber nicht bestimmen, da geht nur schätzen. Ich schätze immer beides, das hat man recht schnell raus. Als 100% Wert ist es 640x480 (also das wäre der gesamte Bildschirm).

  • Und wie soll ich das rechnen?!?
    Wäre sehr nett wenn du mir erklären würdest wie dies geht.


    LG,
    Skoam

  • Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist TextDrawTextSize-X = 120 + 64 = 184.
    Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre TextDrawTextSize-Y = 24.

  • Bitte beachte das manche Monitore andere größe haben da ein 20+ Zoll Monitore eine pixel Anzahl von:
    1920*1080 haben


    Die Anzahl der tatsächlichen Pixel des Bildschirms hat damit nichts zu tun. Du kannst dir auf deinem Bildschirm ein Koordinatensystem vorstellen, das 640 auf 480 ist. Somit entsprechen die X = 640 den 1920 Pixel bei einem Full HD Bilschirm, und den 3840 Pixeln bei einem 4K Bildschirm.
    Man muss aber immer mit der 640 x 480 rechnen. Wenn du für das Textdraw X = 1200 angibst, dann wirst du es nicht mehr sehen. ;)

  • Bei ein 20+ Zoll Monitor leider doch


    Ich hab 2 Monitore unterschiedlicher Auflösung, ja das hat seinen grund.
    Einmal 1920 x 1080 und einmal 1600 x 900.


    Beide größer als 20 Zoll.


    Es gibt eher Verschiebungsprobleme/Darstellungsprobleme bei 21:9, 16:9, 16:10, 4:3 und 3:2 Ausführungen der Bildschirme.


    Das hängt aber nicht von der Größe des Monitors o.ä. ab, sondern wie Jeffry sagte von der Auflösung.
    Die unterscheidet sich bei bei 20 Zoll und 24 Zoll kein Stück, wenn die Auflösung gleich bleibt.


    Mit dieser Funktion - http://wiki.sa-mp.com/wiki/GetPlayerCameraAspectRatio - kann man das ganze etwas in den Griff bekommen :thumbup:

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Das hängt auch davon ab, wie der Textdraw positioniert ist und was dort überhaupt steht.


    // Zitat fail...

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski