Рейтинг - 5.0 (7)

Рисование на экране с plugin-sdk.

В данной статье ознакомимся с рисованием в Plugin SDK. Нам понадобятся следующие хедеры:

#include "plugin.h" 
#include "game_sa\CSprite2d.h" 
#include "game_sa\CTxdStore.h"

Мы разделим наш код на 3 части:

  • Инициализация ( Выполняется при старте игры ). Сюда мы поместим загрузку текстуры. Событие initRwEvent.
  • Рисование ( Выполняется в цикле игры ). Здесь будет вывод текстуры на экран. Событие drawingEvent.
  • Закрытие ( Выполняется при закрытии игры ). Сюда поместим удаление текстуры. Событие shutdownRwEvent.

Для работы с текстурой мы будет использовать интерфейс CSprite2d. Мы создадим переменную-обьект класса CSprite2d:

static CSprite2d mySprite;

Устанавливаем пространство имен "plugin", чтобы не писать "plugin::"...

using namespace plugin;

Рассмотрим код, который мы добавляем в события.

Events::initRwEvent += [] {
 // Добавляем новый слот для нашего txd 
 int txd = CTxdStore::AddTxdSlot("mytxd");
 // Загружаем наш txd в выделенный слот 
 CTxdStore::LoadTxd(txd, "MODELS\\MYTXD.TXD");
 // Увеличиваем счётчик использований для созданного txd 
 CTxdStore::AddRef(txd);
 // Сохраняем текущий txd 
 CTxdStore::PushCurrentTxd();
 // Устанавливаем наш txd как текущий 
 CTxdStore::SetCurrentTxd(txd);
 // Назначаем текстру нашему спрайту 
 mySprite.SetTexture("tex", "texA");
 // Восстанавливаем сохранённый txd 
 CTxdStore::PopCurrentTxd();
};

Для установки текстуры спрайту, нам нужно установить txd, в котором находится нужная текстура, как текущий. Поэтому мы сохраняем поточный текущий txd, а после установки текстуры спрайту - восстанавливаем его. Отрисовка:

Events::drawingEvent += [] {
 // Рисуем наш спрайт 
 mySprite.Draw(20.0, 20.0, 200.0, 200.0, CRGBA(255, 255, 255, 255));
};

Удаление:

Events::shutdownRwEvent += [] {
 // Удаляем наш спрайт 
 mySprite.Delete();
 // Удаляем наш txd 
 CTxdStore::RemoveTxdSlot(CTxdStore::FindTxdSlot("mytxd"));
};

Весь код:

#include "plugin.h" 
#include "game_sa\CSprite2d.h" 
#include "game_sa\CTxdStore.h" 

// Используем пространство имен "plugin" 
using namespace plugin;

class TestPlugin {
public:
 TestPlugin() {
 // Переменная - обьект спрайта 
 static CSprite2d mySprite;

 Events::initRwEvent += [] {
 // Добавляем новый слот для нашего txd 
 int txd = CTxdStore::AddTxdSlot("mytxd");
 // Загружаем наш txd в выделенный слот 
 CTxdStore::LoadTxd(txd, "MODELS\\MYTXD.TXD");
 // Увеличиваем счётчик использований для созданного txd 
 CTxdStore::AddRef(txd);
 // Сохраняем текущий txd 
 CTxdStore::PushCurrentTxd();
 // Устанавливаем наш txd как текущий 
 CTxdStore::SetCurrentTxd(txd);
 // Назначаем текстру нашему спрайту 
 mySprite.SetTexture("tex", "texA");
 // Восстанавливаем сохранённый txd 
 CTxdStore::PopCurrentTxd();
 };

 Events::shutdownRwEvent += [] {
 // Удаляем наш спрайт 
 mySprite.Delete();
 // Удаляем наш txd 
 CTxdStore::RemoveTxdSlot(CTxdStore::FindTxdSlot("mytxd"));
 };

 Events::drawingEvent += [] {
 // Рисуем наш спрайт 
 mySprite.Draw(20.0, 20.0, 200.0, 200.0, CRGBA(255, 255, 255, 255));
 };
 }
} test;

Теги: draw, рисование, plugin sdk

KiLLeR96   (03.10.13 14:30)
5+++. Хотелось бы еще урок по рисованию в пространстве(как,например, треугольник ХП над головами педов).

SHooZ   (04.07.14 03:28)
спрайты рисуются на настоящих координатах монитора?
Т.е. для конвертирование в стандартную для скриптинга систему нужно юзать

Код
int x = GetSystemMetrics(SM_CXSCREEN);  
  int y = GetSystemMetrics(SM_CYSCREEN);
  x /= 640.0;  
  y /= 420.0;  
  Speed.Draw(520.0*x, 370.0*y, 148.0, 148.0, CRGBA(255, 255, 255, 255));
 ?
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
А вы проходили GTA San Andreas на 100% без читов и скриптов?
Всего ответов: 5
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сегодня нас посетили:
wmysterio, Dyabda
Реклама