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

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

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

Регистрация: Feb 2014
Сообщений: 192
Arrow организация кода для игры

Я пытаюсь сделать игрушку. Подскажите правильно ли делаю.
У меня есть допустим 4 класса:
1. Main - главный класс, в котором я делаю экземпляры фона , машины. Затем каждый кадр
вызываю статический метод класса Uprav.klava (fon,car, mouseX,mouseY) - ну и параметры ссылки на экземпляры и положение указателя мыши.
2. Car - класс автомобиля, в котором имеются только переменные (скорость ...)
3. Fon - класс фона с объектами
4. Uprav - класс управления авто.
Есть ли какие-либо стандарты для кода типовой игры?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Гугл в помощ. Это уже миллиард раз обсуждалось. MVC и другие шаблоны проектирования

Старый 26.09.2015, 21:22
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 3  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Да стандартов не посчитаешь, и все только помогают писать игру. Для этого они и существуют.
Начать можно с
http://www.ant-karlov.ru/pishem-igru-vstuplenie.html
__________________
There is no thing in this world that is not simple.

Старый 26.09.2015, 21:52
Dmitriy154 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy154 Найти все сообщения от Dmitriy154
  № 4  
Ответить с цитированием
Dmitriy154

Регистрация: Feb 2014
Сообщений: 192
ZackMercury, спасибо за ссылку!

Старый 26.09.2015, 22:46
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
по своему опыту, пиши как можешь и параллельно читай шаблоны проектирование, потому как не написав *****код, не сможешь понять всю прелесть шаблонов.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
neonoviiwolf, чтобы браться за шаблоны - нужно знать язык, свободно им владеть и выражать что вздумается.
Рановато. Чтобы понять, как решать проблемы - нужно понять, что мы именно хотим решать.

Добавлено через 3 минуты
Для клавиатуры я использую стырянную конструкцию у caseyryan, который в свою очередь скопировал конструкцию из AS2.
Код AS3:
package com.shooter 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
 
	/**
	 * ...
	 * @author ZackMercury
	 */
	public class Key 
	{
		private var keysDown:Object = { };
 
		public function Key() 
		{
			super();
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void
		{
			stage.addEventListener(KeyboardEvent.KEY_DOWN, kDown);
			stage.addEventListener(KeyboardEvent.KEY_UP, kUp);
		}
 
		private function kDown(e:KeyboardEvent):void
		{
			keysDown[e.keyCode] = true;
		}
 
		private function kUp(e:KeyboardEvent):void
		{
			keysDown[e.keyCode] = null;
		}
 
		public function isDown(key:int):Boolean
		{
			return keysDown[key];
		}
	}
 
}
Инициализирую, добавляю на сцену в главном классе, и в основном цикле
Код AS3:
if(k.isDown(Keyboard.SPACE))
   person.jump();
__________________
There is no thing in this world that is not simple.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
который в свою очередь скопировал конструкцию из AS2.
мм.. Там только метод как в as2 вызывается, больше ничего общего. Но конструкцию придумал не я, а ты выложил не ту, что использовал я
У тебя не рабочая конструкция, там никогда не будет stage (к слову, она даже не скомпилируется), так как у тебя класс не расширяет ни DisplayObject ни EventDispatcher и в дисплей лист не может быть добавлен, и слушатели принимать
Да и лучше все методы этого класса сделать статиками

Старый 27.09.2015, 09:24
Dmitriy154 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy154 Найти все сообщения от Dmitriy154
  № 8  
Ответить с цитированием
Dmitriy154

Регистрация: Feb 2014
Сообщений: 192
А ведь я также использую код caseyryan, я думаю он не будет против, только одну переменную добавил
Код AS3:
package {
 
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
 
	public class Key {
 
		private static var initialized:Boolean = false;		
		private static var keysDown:Object = new Object();
		static var keysDownNow:Boolean; //моя переменная
 
		public static function initialize(stage:Stage):void {
			if (!initialized) {
				stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
				stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
				stage.addEventListener(Event.DEACTIVATE, clearKeys);
				initialized = true;
			}
		}
 
		public static function isDown(keyCode:uint):Boolean {
			if (!initialized) {
				throw new Error("Key class has not yet been initialized.");
			}
			return Boolean(keyCode in keysDown);
		}
 
		private static function keyPressed(event:KeyboardEvent):void {
			keysDown[event.keyCode] = true;
			keysDownNow = true;
		}
 
		private static function keyReleased(event:KeyboardEvent):void {
			if (event.keyCode in keysDown) {
				delete keysDown[event.keyCode];
			}
			keysDownNow = false;
		}
 
		private static function clearKeys(event:Event):void {
			keysDown = new Object();
		}
	}
}
А шаблоны проектирования, наверное, пока не для моего ума, слишком громоздко

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
только одну переменную добавил
Для чего? Она все равно не будет правильно работать. Потому что при зажатии двух клавиш одновременно и последующем отпускании одной из них, переменная станет false, а клавиша в этот момент будет нажата
Если уж надо проверить нажато ли что-то в данный момент, то нужно проверять всю коллекцию
как-то так:

Код AS3:
public static function isSomethingPressed():Boolean {
   for (var i:String in keysDown) return true;
   return false;
}

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Да и лучше все методы этого класса сделать статиками
Статики медленнее, намного быстрее обращение к члену класса или локальной переменной.

Код AS3:
У тебя не рабочая конструкция, там никогда не будет stage (к слову, она даже не скомпилируется), так как у тебя класс не расширяет ни DisplayObject ни EventDispatcher и в дисплей лист не может быть добавлен, и слушатели принимать
Не дописал чуток
__________________
There is no thing in this world that is not simple.


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

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

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


 


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


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