2014-10-15 3 views
0

После попытки пары различных фреймворков HTML5, я всегда считал, что чистая JS самая привлекательная. Однако я не уверен в том, как я его структурирую.Структурирование игры HTML5 без рамки

В настоящее время я объявляя различные объекты как глобальные переменные, как, например:

var titlescreen = new Titlescreen(); 
var fps = new FPSTracker(); 
var input = new Input(); 
var background = new Background();  
var shops = new Shops(); 
var chunkhandler = new ChunkHandler(); 
var explosionhandler = new ExplosionHandler(); 
var ui = new UI(); 
var world = new World(); 
var player = new Player(); 
var joystick = new Joystick(); 

Моя главная проблема состоит в том, как я их связь друг с другом. Например, класс Player получает доступ к некоторым функциям world, просто используя его имя (world.functionINeedToUse();). Исходя из фона Java, это дает мне очень плохое значение, поскольку оно зависит от объявления этой глобальной переменной с конкретным именем. Хотя я считаю, что JS является более прощающим языком, это все еще не так. Пока у меня не было никаких проблем.

Есть ли более эффективные способы структурирования игры? Как насчет проблемы с игроком/миром?

+0

Знаете ли вы о конструкторах и прототипах? Вы можете использовать ту же структуру, что и в Java. –

+0

Я думаю, что вы ответили на свой вопрос :) Зависимость, которую вы проиллюстрировали, является неизбежной и совершенно хорошей практикой кодирования в JS. – d13

+0

Посредник может работать как объекты, извещающие события, которые другие могут слушать. Для использования функций конструктора и прототипа в JavaScript вы можете прочитать этот ответ: http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 – HMR

ответ

0

Если я понял вас, вы ищете способ иметь шаблон ООП, не так ли? В JS вы можете определить классы с конструкторами и прототипами.

Однако, если вы ищете более мощные инструменты, вам следует взглянуть на надмножества, такие как CoffeeScript (синтаксис Ruby/Python) или синтаксис TypeScript (C#/Java).

0

Я использую прототипы для объявления «классов», как вы это называете, на Java.

Вот статья, которая описывает, как использовать их: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript

Кроме того, я организую свою сцену в виде древовидной структуры. Таким образом, World - это корень, а Player - ребенок World. Таким образом, у меня больше нет всех глобальных переменных. Связь между фигурами (World и Player) осуществляется через ассоциации между ними.

Я создаю дерево, используя композитный узор. Поэтому я определил прототип Shape и композитный прототип, который расширяет Shape и имеет список дочерних фигур. World и Player будут распространяться от Composite и Shape

Смежные вопросы