Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.04.2013, 04:57
zzSpirit вне форума Посмотреть профиль Отправить личное сообщение для zzSpirit Найти все сообщения от zzSpirit
  № 1  
Ответить с цитированием
zzSpirit
 
Аватар для zzSpirit

Регистрация: Jan 2013
Адрес: Москва, Сходня
Сообщений: 41
По умолчанию Структура написания приложения

Здравствуйте, уважаемые программисты!
После процедурного программирования все не могу понять, как всетаки начать писать игру...
До паттернов еще не дошел, хочу что-нибудь простенькое для себя пока написать, что бы убрать непонятки.

К примеру, у меня в игре есть меню и сама игра. Пробовал сделать 2 класса Menu и Game и вызывать их из главного класса, но тут возникает проблема - приходится передавать ссылки на класс Main и на прочие...

Решил сделать такую структуру:
Код AS3:
package sources
{
	import flash.display.*;
	import flash.events.*;
 
	public class Main extends Sprite
	{
		public function Main():void
		{
			if(stage) init(); else addEventListener(Event.ADDED_TO_STAGE,init);
		}
 
		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE,init);
			// тут инициализация
			menu();
		}
 
		private function menu():void
		{
// тут главное меню
}   private function game():void {
// тут код игры
function somethingFunction(e:Event):void { } function enterFrameHandler(e:Event):void { } }   } }
Но тут мне не нравится что все в одном классе, получится слишком длинный код в итоге, где сложно что-то найти поменять и т.д. + неудобно что у меня функции somethingFunction() и enterFrameHandler() располагаются в методе game(). А если я вынесу их за пределы метода game() - то теряется структура и читаемость кода, хотя так читаемость кода тоже не очень хорошая.

Кто как делает?

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

Старый 10.04.2013, 05:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
приходится передавать ссылки на класс Main и на прочие...
Приходится? Кому и зачем они вдруг понадобились?
__________________
Reality.getBounds(this);

Старый 10.04.2013, 06:14
Babylon вне форума Посмотреть профиль Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 3  
Ответить с цитированием
Babylon
Banned
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
ООП предполагает наличие объекта, над которым производятся какие то процедуры. Например, в JS большая сложная функция jQuery работает над DOM. В AS это Object поэтому от "процедурного" программирования Вы никуда не уйдете. Только процедуры называются функциями и работают они по большей частью со ссылками на разные объекты Нарисовали бы логику для начала по-детальнее - что куда? Так и замысел ваш станет более понятен вам самому, а за ним и умысел увидим.

Старый 10.04.2013, 06:54
zzSpirit вне форума Посмотреть профиль Отправить личное сообщение для zzSpirit Найти все сообщения от zzSpirit
  № 4  
Ответить с цитированием
zzSpirit
 
Аватар для zzSpirit

Регистрация: Jan 2013
Адрес: Москва, Сходня
Сообщений: 41
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Приходится? Кому и зачем они вдруг понадобились?
Недавно я писал *****код, в котором передал ссылку на Main в класс Game, чтобы там создать экземпляр класса APIConnection (vkontakte api). Все получилось и даже выполнял запросы, хотя код очень корявый.

Зачем я так сделал? Перед этим я создавал экземпляр APIConnection в Main классе и передавал ссылку на экземпляр в экземпляр класса Game, но это выдало несколько ошибок, причем не в моих классах, а в классах VK... Понял что это неправильно и так больше делать не стал.

Теперь понял что все это бред и все это надо писать в классе Main. Только код то длинный получается, я в нем начинаю путаться, а если ошибки возникать начинают, в которых компилятор не указывает номер строки - то я полчаса мучаюсь с этим кодом и в итоге создаю новый проект и пишу все снова.

А если так писать всю игру - то несколько тысяч строк кода в классе Main будет в итоге - так и должно быть?

Добавлено через 11 минут
Цитата:
Сообщение от Babylon Посмотреть сообщение
ООП предполагает наличие объекта, над которым производятся какие то процедуры. Например, в JS большая сложная функция jQuery работает над DOM. В AS это Object поэтому от "процедурного" программирования Вы никуда не уйдете. Только процедуры называются функциями и работают они по большей частью со ссылками на разные объекты Нарисовали бы логику для начала по-детальнее - что куда? Так и замысел ваш станет более понятен вам самому, а за ним и умысел увидим.
Вроде бы все понятно, но ведь в главном файле код получится на несколько тысяч строк кода - меня это пугает, т.к. сложно найти ошибку и очень запутанно все будет. Еще методы VK.api работают так, что они не возращают значение в переменную, а вызывают 1 функцию при удаче и другую при неудаче. И у меня получается куча функций, куча api-запросов, причем в этих функциях по одной строчке кода. То есть идет запрос, потом функция возврата значения, потом функция ошибки, потом опять запрос и т.д.

В общем куча таких непоняток, которые мне кайф от программирования прям ломают.
Никакого прогресса, стою на месте, сдвинуться не могу, т.к. не понимаю куда двигаться. Но спать не иду

Старый 10.04.2013, 09:28
Babylon вне форума Посмотреть профиль Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 5  
Ответить с цитированием
Babylon
Banned
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
В вашем словесном потоке очень трудно разобраться, а значит и помочь вам. Код в студию и комменты к нему. А вообще есть видеокурсы по программированию на апи вк. Согласен, апи неидеально, но вполне се работоспособно

Старый 10.04.2013, 13:44
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 6  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Я уже много раз говорил. Не придумывайте велосипеды. Сначала посмотрите как работают чужие. Изучите движки, как там построено, почитайте туторы по играм. Зачем мучаться? Один уже помучался - скопируйте его наработки.
__________________
мой пустой блог

Старый 10.04.2013, 13:49
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 7  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
А я использую кастрированный MVC без модели. Т.е. главный класс создает Controller, который загружает и парсит данные, а потом создает вьюшку, которая использует состояния для отображения (MenuState, GameState extends acse.display.State).
Получается очень простая структура.

Старый 10.04.2013, 16:20
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 8  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
А я использую кастрированный MVC без модели
Это не MVC .
Это другой паттерн Это паттерн пылесос : vacuum cleaner :faceplam
__________________
Марк Tween

Старый 10.04.2013, 23:45
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 9  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,652
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Цитата:
Сообщение от zzSpirit Посмотреть сообщение
несколько тысяч строк кода в классе Main будет в итоге - так и должно быть?
Так быть не должно, Б-же упаси от такого.

Код должен быть разбит по мелким и понятным классам. Объекты создаются по мере надобности. Тот, кто создал объект, дергает его методы и слушает его события. Созданный объект ничего не знает о своем создателе и шлет наверх события в надежде, что их кто-то услышит.

Цитата:
Перед этим я создавал экземпляр APIConnection в Main классе и передавал ссылку на экземпляр в экземпляр класса Game, но это выдало несколько ошибок, причем не в моих классах, а в классах VK... Понял что это неправильно и так больше делать не стал.
Создавать APIConnection в Main и передавать его в Game - это как раз очень правильно, вы зря отказались от этого направления. То, что RTE вылетело из библиотеки вконтакта, еще не означает, что ошибка там. Скорее всего, вы кормите туда кривые данные. Продолжайте копать (:
__________________
тонкий тролль, осеянный благодатью

Старый 12.04.2013, 04:02
zzSpirit вне форума Посмотреть профиль Отправить личное сообщение для zzSpirit Найти все сообщения от zzSpirit
  № 10  
Ответить с цитированием
zzSpirit
 
Аватар для zzSpirit

Регистрация: Jan 2013
Адрес: Москва, Сходня
Сообщений: 41
Наверное лучший совет:
Цитата:
Сообщение от iflamberg Посмотреть сообщение
Я уже много раз говорил. Не придумывайте велосипеды. Сначала посмотрите как работают чужие. Изучите движки, как там построено, почитайте туторы по играм. Зачем мучаться? Один уже помучался - скопируйте его наработки.
Действительно, когда смотрю чужие коды, туторы и т.д. - много вопросов сами с собой решаются и это большое удовольствие мне приносит. Иногда бывает даже создаю новую тему с вопросом, пока сформулирую вопрос и пока попробую написать код чтобы показать в чем проблема - вопрос решается.

Код AS3:
В вашем словесном потоке очень трудно разобраться, а значит и помочь вам. Код в студию и комменты к нему. А вообще есть видеокурсы по программированию на апи вк. Согласен, апи неидеально, но вполне се работоспособно
Да хрен с ним, с кодом, уже это все не так важно

В общем, забью на лень и буду все подряд по теме изучать. iflameberg похоже наставил меня на путь истинный
Всем спасибо.

Добавлено через 22 минуты
А хотя, убежусь кое в чем, пользуясь случаем:
Цитата:
Сообщение от Gaen Посмотреть сообщение
Так быть не должно, Б-же упаси от такого.
Код должен быть разбит по мелким и понятным классам. Объекты создаются по мере надобности. Тот, кто создал объект, дергает его методы и слушает его события. Созданный объект ничего не знает о своем создателе и шлет наверх события в надежде, что их кто-то услышит.
Это я и так знал, но спасибо за то что напомнил об этом и я лучше все обдумал сейчас о структуре.
Цитата:
Создавать APIConnection в Main и передавать его в Game - это как раз очень правильно, вы зря отказались от этого направления. То, что RTE вылетело из библиотеки вконтакта, еще не означает, что ошибка там. Скорее всего, вы кормите туда кривые данные. Продолжайте копать (:
Вроде бы данные были правильные, т.к. в Main запросы работали, в Game - нет, хотя если передать Main ссылкой в Game или написать parent.stage и т.д. - все работало. Ладно, фиг с ним, ща это не так важно, сам разберусь думаю.

Меня очень волнует - правилен ли сам подход такой? прям не терпится узнать... Описываю:
если бы я делал кадрами - то я бы сделал на первом кадре экран загрузки, на втором меню, на третьем игру, на четвертом магазин...
Правильно ли сделать также классами(вместо каждого кадра по классу), что бы не писать все это в главном классе?
То есть у меня будет главный класс Main, который будет создавать экземпляры след. классов и запускать их:
  • Main - главный класс, который запускает все остальные
  • LoadGame - экран загрузки игры
  • Menu - меню игры
  • Game - сама игра
  • Shop - магазин игры

То есть Main первым делом запускает загрузку и слушает ее, как игра загрузилась, делаем LoadGame = null, чтоб не засорять память и создаем класс Menu... Блин, вот опять лажа получилась. Как я из класса Menu вызову класс Game, не используя parent?
Также, при выходе из класса Game как я скажу классу Main чтоб он обнулил класс Game и запустил класс Menu? Хм... По идее Main слушает все классы, но я не пойму как сделать прослушивание не покадрово, не с какой-то переодичностью типа таймера, а чтоб память не засорялась. Т.е. чтоб прослушка не была ежесекундной к примеру, а чтоб Game сказал классу Main что игра окончилась и все, а не было постоянной проверки окончилась ли игра, в игре ведь и так расчетов много очень, нефиг проц грузить.

Кароче нифига я не знаю, фигню понаписал, буду исходники изучать... Но если ответите как это теоритически все работает - очень рад буду. А то пока не пойму как это работает - к паттернам как-то очень хочется переходить, т.к. напишу код, я в нем путаюсь, мне он не нравится, он становится большим - удаляю, замучился уже.

Ну ладно, iflamberg дал мне совет, воспользуюсь им...

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:35.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.