• 0
Antoxa39

[закрыто] Вопрос по TextDraw

Вопросы

 

  открыть спойлер


Мне их вывести надо, когда игрок за рулем,я понял только одно if(PLAYER_STATE_DRIVER)

{

 

}

Все,больше ничего. А как сделать спидометр,надеюсь сам разберусь)

Поделиться сообщением


Ссылка на сообщение

3 ответа на этот вопрос

  • 2

@Antoxa39, в функции OnPlayerStateChange, соответственно, где у вас осуществляется проверка на то, сел ли игрок за руль, необходимо вызвать функции отображения TextDraw'ов:

// в OnPlayerStateChange
if (newstate == PLAYER_STATE_DRIVER) {
    PlayerTextDrawShow(playerid, Textdraw0);
    PlayerTextDrawShow(playerid, Textdraw1);
    // ...
    PlayerTextDrawShow(playerid, Textdraw24);
    PlayerTextDrawShow(playerid, Textdraw25);
}

Дабы не прописывать так 26 строк для отображения и скрытия спидометра, обычно создают массив из текстдравов, например, так:

#define MAX_SPEEDOMETER_TEXTDRAWS 26
new PlayerText:TextDrawSpeedometer[MAX_SPEEDOMETER_TEXTDRAWS][MAX_PLAYERS];

Далее переименуйте все свои текстдравы по следующему алгоритму: Textdraw0 на TextDrawSpeedometer[playerid][0], Textdraw1 на TextDrawSpeedometer[playerid][1] и так далее. Сделать это можно в любом текстовом редакторе. В результате ваш код в OnPlayerConnect (или где у вас идет создание текстдравов) будет выглядеть примерно так:

TextDrawSpeedometer[0][playerid] = CreatePlayerTextDraw(playerid, 635.000000383.185119"spedom:1");
PlayerTextDrawLetterSize(playerid, TextDrawSpeedometer[0][playerid], 0.0000000.000000);
PlayerTextDrawTextSize(playerid, TextDrawSpeedometer[0][playerid], -176.25006151.333259);
PlayerTextDrawAlignment(playerid, TextDrawSpeedometer[0][playerid], 2);
PlayerTextDrawColor(playerid, TextDrawSpeedometer[0][playerid], -1);
PlayerTextDrawSetShadow(playerid, TextDrawSpeedometer[0][playerid], 0);
PlayerTextDrawSetOutline(playerid, TextDrawSpeedometer[0][playerid], 21);
PlayerTextDrawFont(playerid, TextDrawSpeedometer[0][playerid], 4);
// ...

Тогда для отображения останется использовать лишь один цикл:

 

// в OnPlayerStateChange

if (newstate == PLAYER_STATE_DRIVER) {
    for (new i = 0; i < MAX_SPEEDOMETER_TEXTDRAWS; i++) {
        PlayerTextDrawShow(playerid, TextDrawSpeedometer[i][playerid]);
    }
}

Ну, и, соответственно, когда игрок покидает транспортное средство (то есть его предыдущие состояние oldstate - PLAYER_STATE_DRIVER), необходимо скрыть текстдравы:

// в OnPlayerStateChange

if (oldstate == PLAYER_STATE_DRIVER) {
    for (new i = 0; i < MAX_SPEEDOMETER_TEXTDRAWS; i++) {
        PlayerTextDrawShow(playerid, TextDrawSpeedometer[i][playerid]);
    }   
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee 

@Antoxa39 

 + ещё немного:

if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
    // ...
}

Данный участок кода можно вставлять где угодно. Функция GetPlayerState возвращает нынешний статус игрока, после чего можно "сравнивать" его с нужными вам статусами

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу