Я починаю свій перший «правильний» ігровий проект, і я неминуче потрапляю на блок, намагаючись вирішити, як ігрові компоненти в XNA повинні спілкуватися.
З попередніх подій програмування (Java) графічного інтерфейсу, обробники та слухачі здавалися дорогою вперед. Тож у мене був би якийсь автобус подій, який приймає реєстрації подій та класи, підписані на ці події, з обробниками, які мають справу з ними. Наприклад (псевдокод):
class SpriteManager
Update(){
if(player.collidesWith(enemy)
// create new 'PlayerCollisionEvent'
}
class HUDManager
onPlayerCollisionEvent(){
// Update the HUD (reduce lives etc)
}
Однак я не впевнений у налаштуванні коду (на C #), який би знадобився для повного виконання цього завдання. Що відстежує події (якась шина?), І як вона структурована?
Також, мабуть, багато згадується про ігрові сервіси, за допомогою яких ви можете зареєструвати GameComponent в своєму головному класі Game.cs, а потім отримати його з будь-якої точки вашого коду, яка має посилання на головний об’єкт 'Game'. Я спробував це з моїм об'єктом SpriteBatch, і це здається дуже простим .. однак, я не можу бачити, щоб це було настільки гнучко, як модель події.
Візьмемо для прикладу, коли ворог гине. Ми хочемо оновити рахунок гри. Використовуючи сервіси, я можу отримати посилання на мій об’єкт StateManager, створений в Game1 та доданий як послуга, а потім встановити «оцінка» на нове значення. Я б подумав, що подія "onEnemyDeath", яку можна по-різному обробляти безліччю класів, але ініційоване 1 рядком коду у відповідному розділі "Виявлення смерті ворога", було б краще, ніж індивідуальне введення кожного необхідного GameComponent, а потім виклик будь-якого потрібні методи.
Або ці нижчі стратегії чимось іншим?
Я усвідомлюю, що це частково мої слабкі знання на C # стільки, скільки парадигми ігрового спілкування, але я дуже хотів би зрозуміти цю фундаментальну річ.
Оновлення
Переглянувши Служби більш детально, я менш переконаний - це в основному передача глобальної змінної навколо (з того, що я розумію).
Оновлення 2
Переглянувши цей основний підручник з обробки подій та тестування зразкового коду, схоже, що події будуть логічним вибором для того, що я обговорюю. Але я не можу багато чого використовувати у зразках, які я бачив. Чи є якась очевидна причина, чому цього не слід робити?