В данной статье ознакомимся с рисованием в Plugin SDK.
Нам понадобятся следующие хедеры:
Код
#include <Windows.h>
#include "plugin\plugin.h"
#include "game_sa\CSprite2d.h"
#include "game_sa\CTxdStore.h"

Мы разделим наш код на 3 части:
-Инициализация (Выполняется при старте игры). Сюда мы поместим загрузку текстуры.
-Рисование (Выполняется в цикле игры). Здесь будет вывод текстуры на экран.
-Закрытие (Выполняется при закрытии игры). Сюда поместим удаление текстуры.
За каждую часть будет отвечать отдельная функция.
Код
void Init();
void Draw();
void Shutdown();

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

Устанавливаем пространство имен plugin, чтобы не писать plugin::...
Код
using namespace plugin;

Функция DllMain будет выглядеть так:
Код
BOOL APIENTRY DllMain(HMODULE module, DWORD reason, LPVOID reserved)
{
  if(reason == DLL_PROCESS_ATTACH)
  {
  // Регистрируем наши функции
  Core::RegisterFunc(FUNC_DRAWING, Draw); // Функцию отрисовки - на этапе, когда доступно рисование
  Core::RegisterFunc(FUNC_INITIALISE_RW, Init); // Функцию инициализации - на этапе инициализации игры
  Core::RegisterFunc(FUNC_SHUTDOWN_RW, Shutdown); // Функцию закрытия - на этапе закрытии игры
  }
  return TRUE;
}

Рассмотрим код самих функций.
Код
void Init()
{
  // Добавляем новый слот для нашего 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, а после установки текстуры спрайту - восстанавливаем его.
Код
void Draw()
{
  // Рисуем наш спрайт (указываем параметры - позиция, ширина, высота, цвет)
  mySprite.Draw(20.0, 20.0, 200.0, 200.0, CRGBA(255, 255, 255, 255));
}

Код
void Shutdown()
{
  // Удаляем наш спрайт
  mySprite.Delete();
  // Удаляем наш txd
  CTxdStore::RemoveTxdSlot(CTxdStore::FindTxdSlot("mytxd"));
}

Весь код:
Код
#include <Windows.h>
#include "plugin\plugin.h"
#include "game_sa\CSprite2d.h"
#include "game_sa\CTxdStore.h"

void Init();
void Draw();
void Shutdown();

// Глобальная переменная - обьект спрайта
CSprite2d mySprite;

// Устанавливаем пространство имен "plugin"
using namespace plugin;

BOOL APIENTRY DllMain(HMODULE module, DWORD reason, LPVOID reserved)
{
  if(reason == DLL_PROCESS_ATTACH)
  {
  // Регистрируем наши функции
  Core::RegisterFunc(FUNC_DRAWING, Draw); // Функцию отрисовки - на этапе, когда доступно рисование
  Core::RegisterFunc(FUNC_INITIALISE_RW, Init); // Функцию инициализации - на этапе инициализации игры
  Core::RegisterFunc(FUNC_SHUTDOWN_RW, Shutdown); // Функцию закрытия - на этапе закрытии игры
  }
  return TRUE;
}

void Init()
{
  // Добавляем новый слот для нашего 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();
}

void Draw()
{
  // Рисуем наш спрайт
  mySprite.Draw(20.0, 20.0, 200.0, 200.0, CRGBA(255, 255, 255, 255));
}

void Shutdown()
{
  // Удаляем наш спрайт
  mySprite.Delete();
  // Удаляем наш txd
  CTxdStore::RemoveTxdSlot(CTxdStore::FindTxdSlot("mytxd"));
}

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));
 ?
Вход на сайт

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

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

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