И попадание пули в бочку похоже решается каким-нибудь _gameEngine->RayTrace ? но для трассировки нужны ведь точка (пушка машины) и направление (камера? направление машины?).
Так ты трассировку то как делать будешь? Внешним объектом? Трассировкой должна и заниматься сама пушка, а у нее уже есть эти данные
DarkDes, объекты не должны взаимодействовать напрямую. Берем пример моей архитектуры, добавляем в контроллер пару событий. OnCollision - столковение, OnDamage - нанесение урона. Для боычки при столкновении проверяем силу удара, отбираем игровые объекты, котороые расположены в определнном радиусе, расчитываем базовый урон, который можно было бы нанести этому объекту, затем вызываем OnDamage. Дальше у машины обрабатываем это событие, расчитываем сопротивление, уменьшая урон и дальше уже уменьшаем ХП
lentinant, удобно только для маленьких конструкций, для больших мне лично реально проще выносить с использованием {0}, {1}. Ну и старый вариант никто не отменил
Kozinaka, кст, я немного разобрался с мыслями. Model - хранит данные игрового объекта, Controller - реакция на различные события, ну а View - соответсвенно отрисовка. Соответсвенно сама модель ничего не должна знать о контроллере и о вьюхе, контроллер ничего не знает о вьюхе, он только управляет данными в модели, ну а вьюха сама берет модель и по данным из нее уже рисует объект
Kozinaka, нее, не понимаешь, AGameObject сам ничего не умеет делать, он просто хранит данные, на самом деле его можно и не делать абстрактным. А в основном цикле уже можно будет пробегаться, смотреть что объект умеет делать и передавать управление уже в эти контроллеры. Как видишь тут как раз таки логика полностью разделена. Хочешь повесил отрисовку червя, хочешь повесил отрисовку жука, хочешь поставил управление клавиатурой, хочешь мышью, хочешь повесил ИИ. В общем то вот. Хотя на самом деле я считаю, что модель и вьюха этого игрового объекта не разделима. Управление, физика, ИИ это да, можно навешивать из-вне уже
Почитал, подумал о вашей логике разделения и пришел вот к такой вот мысли, а почему бы не сделать вот так?
public interface IDrawer {
// Методы для рисования
}
// Этот интерфейс отвечает за отрисовку объекта
public interface IObjectView {
public void Draw(IDrawer drawer);
}
// Этот интерфейс отвечает за игровую логику объекта
public interface IObjectModel {
public void OnTick(float dt);
// Другие различные события игрового мира
}
// Этот интерфейс отвечает за обработку пользовательского ввода для заданного объекта
public interface IObjectController {
public void OnKeyPress(char keyCode);
// Другие события пользовательского ввода
}
// Этот класс представляет собой игровой объект с тремя сущностями, отвечающими за рендер, логику и управление этим объектом
public abstract class AGameObject {
public IDataStorage Data { get; set; } // Область для хранения данных игрового объекта, которая должна быть общая между компонентами
public IObjectView View { get; set; }
public IObjectModel Model { get; set; }
public IObjectController Controller { get; set; }
// Другие сущности игрового объекта, например сущность физики
}
public interface IDataStorage {
public object Get(string key);
public void Set(string key, object value);
}
// А тут типа универсальная такая штука для базовых объектов
public static class GameObjectDataStorageExtension {
public static T Get<T>(this IDataStorage storage, string key) {
return (T)storage.Get(key);
}
public static void Set<T>(this IDataStorage storage, string key, T value) {
storage.Set(key, value);
}
public static float GetX(this IDataStorage storage) {
return storage.Get<float>("position.X");
}
public static float GetY(this IDataStorage storage) {
return storage.Get<float>("position.Y");
}
// и т.д.
}
Hanabishi, да это сейчас быстренько по все интернету расползется, решил тоже не отставать на данную тему)
В принципе для меня тут больше нравится то что они добавили фильтрацию исключений и сменили способ инициализации словарей, к остальному я как-то равнодушен) Хотя пожалуй, мне еще понравилась короткая запись маленьких методов)
Слишком мощно звучит для моих классов :) Но вообще там функции уровня DrawQuad, DrawMesh, а для конкретных игровых объектов можно вообще ещё один класс написать (или реализовать в этих самых объектах), типа DrawSupergun или DrawBee.
лучше завести что-то типа IDrawableObject с методом Draw в который будет передаваться твой IRenderDevice или что-то типа того, с помощью которого можно будет рисовать примитивы на экране
Думаю либо чуть увеличить разрыв между логами, либо небольшую паузу взять. Думаю начать уже конкретно проектировать само приложение (не писать код) и сделать небольшой альфа-прототип на каком-нибудь Unity (хотел вообще на GameMaker, но похоже с новым обновлением они отказались от WinXP - Steam отказывается запускать GM).
» Программирование / Новведения в C# 6.0
ПС. Кое кто выложил исходники ядра CLR :3
» Secrets Rooms / Новые видео по "Secrets Rooms"
Vitaly7:
» Администрация XGM / Чёрный список (бан-лист)
Ledon:
» Бродилка / [Лог #7] Класс рисовальщика.
» Бродилка / [Лог #7] Класс рисовальщика.
» Secrets Rooms / Новые видео по "Secrets Rooms"
» Бродилка / [Лог #7] Класс рисовальщика.
DarkDes:
» Бродилка / [Лог #7] Класс рисовальщика.
» Программирование / Новведения в C# 6.0
» Lo of the Dark / Lo of the Dark 0.7.4 - Да будет свет!
» Программирование / Новведения в C# 6.0
Покажете, я исправлю
» Программирование / Новведения в C# 6.0
» Бродилка / [Лог #7] Класс рисовальщика.
» Бродилка / [Лог #7] Класс рисовальщика.
» Бродилка / [Лог #7] Класс рисовальщика.
» Администрация XGM / Чёрный список (бан-лист)
» Unity / Рисование для отладки
» Бродилка / [Лог #7] Класс рисовальщика.
» Программирование / Новведения в C# 6.0
В принципе для меня тут больше нравится то что они добавили фильтрацию исключений и сменили способ инициализации словарей, к остальному я как-то равнодушен) Хотя пожалуй, мне еще понравилась короткая запись маленьких методов)
» Welcome to N.T.I. / Ностальгия в действии
» Бродилка / [Лог #7] Класс рисовальщика.
» Программирование / Клавиатура,мышь и джойстик в SFML
» Программирование / Клавиатура,мышь и джойстик в SFML
» Lo of the Dark / Lo of the Dark 0.7.4 - Да будет свет!
» Бродилка / [Лог #7] Класс рисовальщика.