Разделы презентаций


GameDev как хобби

Содержание

Что это?GameDev(Game Development) - это процесс разработки игры под определенную игровую платформу.

Слайды и текст этой презентации

Слайд 1GameDev как хобби
Селиванчиков Дмитрий 11’a’ класс

GameDev как хоббиСеливанчиков Дмитрий 11’a’ класс

Слайд 2Что это?
GameDev(Game Development) - это процесс разработки игры под определенную

игровую платформу.

Что это?GameDev(Game Development) - это процесс разработки игры под определенную игровую платформу.

Слайд 3Плюсы профессии
Достойная заработная плата.
Инвесторы охотно вкладывают средства в продвижение игровых

продуктов.

Плюсы профессииДостойная заработная плата.Инвесторы охотно вкладывают средства в продвижение игровых продуктов.

Слайд 4Минусы профессии
К опыту и знаниям специалиста выдвигаются серьезные требования.
Сложно начать.
Разработчик

должен отодвигать свои амбиции и творческие замыслы на второй план.

Минусы профессииК опыту и знаниям специалиста выдвигаются серьезные требования.Сложно начать.Разработчик должен отодвигать свои амбиции и творческие замыслы

Слайд 5Данные исследования в регионах России (данные на 2017г)

Данные исследования в регионах России (данные на 2017г)

Слайд 6Пять этапов создания игры: от концепта до релиза

Пять этапов создания игры: от концепта до релиза

Слайд 7Концептирование (Concept)
Главная цель данного этапа – это геймдизайнерская документация.

Концептирование (Concept) Главная цель данного этапа – это геймдизайнерская документация.

Слайд 8Прототипирование (Prototyping)
Создание рабочего прототипа.

Прототипирование (Prototyping)  Создание рабочего прототипа.

Слайд 9Вертикальный срез (Vertical Slice)
На этом этапе важно понять, насколько играбельно

то, что вы придумали.

Вертикальный срез (Vertical Slice)  На этом этапе важно понять, насколько играбельно то, что вы придумали.

Слайд 10Производство контента (Content production)
На этом этапе производится достаточное количество контента

для запуска на внешнюю аудиторию.

Производство контента (Content production) На этом этапе производится достаточное количество контента для запуска на внешнюю аудиторию.

Слайд 11ЗБТ и ОБТ
В вашу игру уже играют, но хорошо бы

понаблюдать за тем, как люди это делают.

ЗБТ и ОБТ В вашу игру уже играют, но хорошо бы понаблюдать за тем, как люди это

Слайд 12Release
Ключевая цель -получение прибыли.

ReleaseКлючевая цель -получение прибыли.

Слайд 13Начало пути инди-разработчика

Начало пути инди-разработчика

Слайд 14Два нюанса в работе инди-разработчика
Вам придется долгое время работать без

всякого вознаграждения
Вы всегда будете чувствовать, что недостаточно хороши

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

Слайд 15Как доделать игру
Выбирайте идею, имеющую потенциал
Делайте прототипы
Убедитесь в том, что

игровая механика интересна
Используйте соревнования и другие мероприятия как реальные дедлайны
Не

воротите свой движок без необходимости

Как доделать игру Выбирайте идею, имеющую потенциалДелайте прототипыУбедитесь в том, что игровая механика интереснаИспользуйте соревнования и другие

Слайд 16Рассмотрим создание прототипа игры

Рассмотрим создание прототипа игры

Слайд 17Что будем использовать?
Язык программирования: С++ & Lua
Вспомогательные библиотеки: SFML(v2.4.2), Tgui(v0.8),

SfeMovie(v2.0), Boost(v1.67), json, LuaBridge, ImGui, MetaStuff
Софт: Visual Studio 2017(v.15.8), TiledMapEditor(v0.14),

SublimeTextEditor, Cmake
Система контроля версий: GIT

Что будем использовать?Язык программирования: С++ & LuaВспомогательные библиотеки: SFML(v2.4.2), Tgui(v0.8), SfeMovie(v2.0), Boost(v1.67), json, LuaBridge, ImGui, MetaStuffСофт: Visual

Слайд 18Прототипы основых классов

Прототипы основых классов

Слайд 19Engine::Object

Engine::Object

Слайд 20class Object
{
protected:
ObjectType type;
sf::Vector2f

position;
sf::Texture

texture;
sf::Sprite sprite;
std::string name;
bool IsActive;
DebugWindows dw_o;
public:
Object();
Object(std::string);
~Object() = default;
Object(sf::Vector2f, std::string);
Object(sf::Vector2f, ObjectType, std::string);

bool isActive() const;
void destroy();
const std::string& getName() const;
const sf::Sprite& GetSprite();

friend class DebugWindow;
friend auto meta::registerMembers();
};
class Object{protected: ObjectType      type; sf::Vector2f     position; sf::Texture

Слайд 21template
TupleType MetaHolder::members = registerMembers();
template

Args>
auto members(Args&&... args)
{
return std::make_tuple(std::forward(args)...);
}
template
Member

member(const char* name, T Class::* ptr)
{
return Member(name, ptr);
}

template <>
inline auto registerMembers()
{
return members(
member("name", &Engine::Object::getName),
member("position", &Engine::Object::position),
member("IsActive", &Engine::Object::IsActive)
);
}

MetaStuff

template TupleType MetaHolder::members = registerMembers();template auto members(Args&&... args){ return std::make_tuple(std::forward(args)...);}template Member member(const char* name, T Class::* ptr){

Слайд 22class Actor final : public Entity
{
protected:
//код неполон!
Inventory

inventory;
AnimationManager animManager;
DebugWindows dw_a;

sf::Transformable PointOfFire;

public:
Actor() = delete;
Actor(sf::Image&, sf::Vector2f, sf::IntRect, std::string, sf::RenderWindow& ,Level&):Entity(img,pos,n)
~Actor() = default;

sf::Vector2f getPointOfFire();
void handleEvent(sf::Event& e);
void checkClashes(float time);
void RotateToMouse(float speed, sf::RenderWindow& window);
void update(float time) override;
void getDamage(float dmg);

friend class DebugWindow;
friend auto meta::registerMembers();
};
class Actor final : public Entity{protected: //код неполон! Inventory      inventory; AnimationManager

Слайд 23class Inventory
{
private:
int Count = 0;
std::vector

inv;
std::vector::iterator iter;

public:
~Inventory();

void baseIni()
{
inv.push_back(new

Gun("M9", 2, 2, 0.7));
inv.push_back(new Gun("AR-15", 8, 12, 3.9));
inv.push_back(new Gun("RPG", 15, 1, 6.3));
inv.push_back(new Heal("HP", 20));
}
void AddItem(Item* i) { inv.push_back(i); }
void delItem(std::string Name);
void nextItem() { (Count >= inv.size() - 1) ? Count = 0 : Count++;}

template
T* getItemByName(std::string Name);
template
T* getItem(int index);

std::string getItemName(int num) const;
std::vector getArrayItem() { return inv; }
};

class Item : public Engine::Object
{
public:
Item() = default;
Item(std::string name) : Object(name) { type = ItemType::item; weight = 0; }
virtual ~Item();
float getWeight();
ItemType getType();
protected:
ItemType type;
float weight;
};


Слайд 25 void draw(std::string nameTree, bool isFirstDraw = false)
{
//код

неполон!
if (Engine::VStaticContainer::ShowDemoWindows)
{
if (ImGui::Begin("DebugWindows", NULL))
{

if (ImGui::TreeNode((void*)ptr, nameTree.c_str()))
{
meta::doForAllMembers(
[&](const auto& member)
{
std::string field = "";
switch (checkType())
{
case Engine::INT:
field = (std::string)member.getName() + ": %.i";
ImGui::Text(field.c_str(), member.get(*ptr));
break;
}
}
);
ImGui::TreePop();
}
}
ImGui::End();
}
}

template
class DebugWindows
{
public:
DebugWindows();
~DebugWindows();

void set(T* p)
{
ptr = p;
static_assert(meta::isRegistered(), "!");
}
void draw(std::string nameTree, bool isFirstDraw = false);

private:
template
valueType checkType();
T* ptr;
sf::Vector2f size = { 400,400 };
};

void draw(std::string nameTree, bool isFirstDraw = false) { //код неполон! if (Engine::VStaticContainer::ShowDemoWindows) {  if (ImGui::Begin(

Слайд 27class AnimationManager
{
private:
//код неполон!
std::list animationList; ///< контейнер хранящий

все анимации
public:
AnimationManager() = default;
~AnimationManager();

template
T*

GetCurrAnimation();
template
T GetAnimationByName(std::string NAME);

void SetCurrAnimation(Animation&& ANIM);
void LoadAnimation_x(std::string fileName);

sf::IntRect& AnimUpdate(float TIME);
const std::list& getAnimationList();
};

class AnimationXml final : public Animation
{
public:
std::vector frames;
sf::IntRect& tick(float time) override
{
frame += 0.009 * time;
if (frame > 19) frame = 0;
return frames[frame];
}
};

AnimationManager

class Animation
{
public:
float frame; ///< кол-во кадров
float frameCount;
float speed; ///< скорость анимации
std::string name;
sf::Vector2f scale;

virtual sf::IntRect& tick(float time) = 0;
};

class AnimationManager{private: //код неполон! std::list animationList; ///< контейнер хранящий все анимацииpublic: AnimationManager() = default; ~AnimationManager(); template T*

Слайд 28Engine::Game

Engine::Game

Слайд 29class Game
{
private:
World* world;

lua_State* L;
A*

testWindow;
Engine::Menu* m;
sf::RenderWindow* window;
sf::Clock deltaClock;
sf::View camera;
appState state;
timer time;

public:
Game(sf::RenderWindow& w);
~Game();
void startGame();
void update();
void draw();
void handleEvent(sf::Event& e);
};
class Game{private: World*       world; lua_State*     L; A*

Слайд 30Overlay и ‘Интерфейс отладки’

Overlay и ‘Интерфейс отладки’

Слайд 31struct ImGUI
{
static void ShowHelpMarker(const char *desc);
static void SimpleOverlay(bool

*open);
static void SimpleText(sf::Vector2f position, bool *open, std::string name, std::string

text = "");
static void Text(sf::Vector2f position, bool *open, std::string name, std::string text = "");
};
struct ImGUI{ static void ShowHelpMarker(const char *desc); static void SimpleOverlay(bool *open); static void SimpleText(sf::Vector2f position, bool *open,

Слайд 32class DebuggingSystem
{
public:
static sf::RenderWindow* window;
std::vector entites;
//код

неполон!
public:
DebuggingSystem() = default;
~DebuggingSystem() = default;

static void

setWindow(sf::RenderWindow& w) { window = &w; }
void draw(sf::RenderTarget& target = *window);
void pushRectangle(std::pair e);
void levelObjects(std::vector objs);
void handleEvent(sf::Event& event);
};
class DebuggingSystem{ public: static sf::RenderWindow* window; std::vector entites; //код неполон! public: DebuggingSystem() = default; ~DebuggingSystem() = default;

Слайд 33Engine::DebuggingSystem::draw(…)
void DebuggingSystem::draw(sf::RenderTarget& target)
{
//код неполон!
for (auto& z : obj)

{
auto x = z.second.left;
auto y = z.second.top;

sf::VertexArray

triangle(sf::LinesStrip, 5);
triangle[0] = sf::Vector2f(x, y);
triangle[0].color = sf::Color::Blue;

ImGUI::SimpleText(sf::Vector2f(x * 1.92, y * 1.92), &overlay, "D_Window_" + std::to_string(count)); ///< 1.92 – const, т.к viewport = (0, 0, 1000, 563)
count++;
target.draw(triangle);
}
Console::AppLog::Draw("LogConsole", &LogConsole); ///< Отрисовывает консоль логов
}
Engine::DebuggingSystem::draw(…)void DebuggingSystem::draw(sf::RenderTarget& target){ //код неполон! for (auto& z : obj) { auto x = z.second.left; auto y

Слайд 35Console::AppLog
enum logType { error = 1, info, fatal, system };

class

AppLog
{
private:
static bool ScrollToBottom;
static vector

Buffer;
static std::string items[5]; ///< Строковое представление Console::logType
public:
static void Clear() { Buffer.clear(); Buffer.shrink_to_fit(); }

static void addLog(Log log);
static void addLog(std::string s, logType t)
{ Buffer.emplace_back(Log(s + "\n", t)); }
static void Draw(const char* title, bool *p_open);
};
Console::AppLogenum logType { error = 1, info, fatal, system };class AppLog{private: static bool    ScrollToBottom;

Слайд 37Пример использования Lua & C++

Пример использования Lua & C++

Слайд 38Класс, который хотим передать в Lua
class A
{
public:
std::string name;
std::string

text;
std::string oneFrameText;
public:
A() = delete;
A(std::string n);

void addText(std::string

t);
void addText_l(std::string t);
void addWindow(bool isOpen);
};
Класс, который хотим передать в Luaclass A{public: std::string name; std::string text; std::string oneFrameText;public: A() = delete; A(std::string

Слайд 39void Engine::Game::startGame()
{
L = luaL_newstate();
luaL_openlibs(L);

luabridge::getGlobalNamespace(L)
.beginClass("A")
.addConstructor()

.addFunction("addWindow", &A::addWindow)
.addFunction("addText", &A::addText_l)
.endClass();

luabridge::push(L, testWindow);
lua_setglobal(L, "L_testWindow");
testWindow->addText("Text

From C++");
}

Регистрация класса


Слайд 40Вызываем из Lua класс A

Вызываем из Lua класс A

Слайд 41Музыка и звуки

Музыка и звуки

Слайд 42Engine::AudioPlayer
class AudioPlayer
{
//код неполон!
private:
std::vector musList;
std::vector::iterator iter;
public:
AudioPlayer();
~AudioPlayer();

void Play();
void NextSong();
void PauseMus();
void

SetVolume(float);
void PlaySongByName(std::string);
void LoadMusic(std::string, std::string);
void Update();
};
void Engine::AudioPlayer::GetMusic()
{
std::string path = "Music/";

for (auto & p : fs::directory_iterator(path))
{
auto fileName = p.path().filename().generic_string();
const size_t pos = fileName.find_last_of(".");
fileName.erase(pos, 4);
LoadMusic(fileName, p.path().generic_string());
}
}

void Engine::AudioPlayer::LoadMusic(std::string name, std::string patch)
{
auto Mus = new Music;
Mus->openFromFile(patch);
Mus->setVolume(volume);
Console::AppLog::addLog("Load music at path(" + patch + ")", Console::logType::system);
musList.emplace_back(name, Mus);
}


Слайд 43Звук выстрела
if (!reload.getStatus())
{
if(Mouse::isButtonPressed(Mouse::Button::Left))
{
auto item =

p->inventr.GetCurrItem();
if((PlayerShootClock.getElapsedTime().asMilliseconds() >= item->rechargeTime()) && (ammo > 0))
{

isShoot = true;
PlayerShootClock.restart();
}
}
}
Звук выстрелаif (!reload.getStatus()){ if(Mouse::isButtonPressed(Mouse::Button::Left)) { auto item = p->inventr.GetCurrItem(); if((PlayerShootClock.getElapsedTime().asMilliseconds() >= item->rechargeTime()) && (ammo > 0))

Слайд 45Источники

Источники

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика