Когда я имею дело с несколькими классами в игре Javascript / NodeJS, у меня возникают проблемы с выяснением, какой класс должен генерировать события, а какие классы должны слушать.Я следую этому руководству по созданию игр, управляемых событиями: http://pragprog.com/magazines/2011-08/decouple-your-apps-with-eventdriven-coffeescript
Я пишу небольшую игру и разделил свои классы на следующие контроллеры:
world - создает игровой мири проходит через ряд «ходов», чтобы определить простую игровую логику (то есть персонаж должен двигаться, башня должна стрелять).
башня - башня сидит на сетке 10x10 и имеет диапазон.Когда объект попадает в зону действия, он может стрелять.
мобы (враги) - моб появляется на сетке 10x10 и перемещается каждые 3 секунды.В какой-то момент он находится в пределах досягаемости башни.
Я читал о EventEmitters весь день, но, похоже, не могу понять, как правильно спроектировать мои события.Должны ли мобы запускать событие, когда они двигаются, а башня прислушивается к событию «движение»?Или мир должен контролировать все события, а башни / мобы слушают мир?
См. Ниже пример кода.
Справочная информация: я работал над простой игрой TowerD дляNodeJS и решил сначала внедрить сервер.Я храню все объекты в MongoDB и использую геопространственные вычисления, чтобы определить, находятся ли объекты в пределах досягаемости для съемки.В настоящее время я использую элементарный трехсекундный цикл, чтобы «пометить» логику игры и прогресса, но я бы хотел перейти к действительно управляемой событиями модели и борюсь.
World:
exports.World = class World extends EventEmitter
constructor: ->
### Initial config ###
@gameTime = 3000 # every 3000ms, the game progresses
### Start the game!! ###
@game = setInterval ->
world.gameLoop()
, @gameTime
### Load the map ###
# First level: Hidden Valley
@maps = []
@maps.push new map 'hiddenvalley'
### Load the mobs ###
# First map has one mob: Warrior
@mobs = []
# Let's create two of them
@mobs.push new mob @maps[0].mobs[0]
@mobs.push new mob @maps[0].mobs[0]
(см. Полный мир1030 *
exports.Mob = class Mob extends EventEmitter
move: (X, Y, callback) ->
@loc = [@loc[0] + X, @loc[1] + Y]
newloc = @loc
mobModel.find { uid: @uid }, (err, mob) ->
if(err)
console.log 'Error finding mob: {@uid} ' + err
else
mob[0].loc = newloc
mob[0].save (err) ->
if (err)
console.log 'Error saving mob: {@uid} ' + err
console.log 'MOB ' + @uid + ' [' + @id + '] moved to (' + @loc[0] + ',' + @loc[1] + ')'
(см. Полный источник mobs.coffee: https://github.com/bdickason/node-towerd/blob/master/controllers/mobs.coffee)
Полный источник проекта: https://github.com/bdickason/node-towerd
Любая помощь в мероприятиях приветствуется. Язалил на github около 15 игр nodejs и пока не нашел никого, кто бы использовал этот шаблон: (