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

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

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

Регистрация: Jun 2009
Сообщений: 64
По умолчанию Игровое поле

товарищи, есть ли у кого-нить пример кода игрового поля, которое бы при нажатой кнопке мыши передвигалось (т.е. поле, например, 1000х1000, а видимая область только 200х200), а при прокручивании колесика мыши менялся бы масштаб?

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
(MouseEvent.MOUSE_DOWN, startDragField) ;
(MouseEvent.MOUSE_UP, stopDragField) ;
(MouseEvent.MOUSE_WHEEL, changeScale);
это совсем не трудно и писать не много

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

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
А давайте вы ТЗ сразу скинете... мы тут всем форумом соберемся, распределим задачи и через пару часов сделаем вам игрушку...

Сорри конечно, но чет мне кажется нет в посте автора конкретной задачи, с решением которой возникли проблемы...

Старый 01.07.2009, 10:09
LA_ вне форума Посмотреть профиль Отправить личное сообщение для LA_ Найти все сообщения от LA_
  № 4  
Ответить с цитированием
LA_

Регистрация: Jun 2009
Сообщений: 64
пока лишь начинаю изучать as.
хотелось бы посмотреть как это устроено в существующих играх.

я не прошу никого написать этот код для меня.
просто если он у кого-нить уже есть - поделитесь плз.

заранее спасибо!

Старый 01.07.2009, 12:36
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Renderable.as
Код AS3:
package com.aditall.flexibles 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Rectangle;
 
	/**
	 * Renderable class.
	 * @author wvxvw
	 */
	public class Renderable extends Sprite
	{
		protected var _bounds:Rectangle = new Rectangle();
		protected var _hasVisibleParts:Boolean;
		protected var _valid:Boolean;
		protected var _color:uint = 0xFF;
		protected var _alpha:Number = 1;
		protected var _port:Port;
		protected var _newBounds:Rectangle = new Rectangle();
		protected var _visibleBounds:Rectangle = new Rectangle();
 
		public override function get x():Number { return _newBounds.x; }
 
		public override function set x(value:Number):void 
		{
			_newBounds.x = value;
			valid = false;
		}
 
		public override function get y():Number { return _newBounds.y; }
 
		public override function set y(value:Number):void 
		{
			_newBounds.y = value;
			valid = false;
		}
 
		public override function get width():Number { return _newBounds.width; }
 
		public override function set width(value:Number):void 
		{
			_newBounds.width = value;
			valid = false;
		}
 
		public override function get height():Number { return _newBounds.height; }
 
		public override function set height(value:Number):void 
		{
			_newBounds.height = value;
			valid = false;
		}
 
		public function get valid():Boolean { return _valid; }
 
		public function set valid(value:Boolean):void 
		{
			if (value === _valid) return;
			if (value) removeEventListener(Event.ENTER_FRAME, renderHandler);
			else addEventListener(Event.ENTER_FRAME, renderHandler);
			_valid = value;
		}
 
		public function get visibleWidth():int
		{
			return _visibleBounds.width;
		}
 
		public function get visibleHeight():int
		{
			return _visibleBounds.height;
		}
 
		public function Renderable()
		{
			super();
			addEventListener(Event.ADDED_TO_STAGE, 
								addedToStageHandler, false, 0, true);
		}
 
		protected function addedToStageHandler(event:Event):void 
		{
			if (parent is Port)
			{
				_port = parent as Port;
				drawIn((parent as Port).bounds);
				addEventListener(Event.REMOVED, removedHandler);
				addEventListener(Event.RENDER, renderHandler);
			}
		}
 
		protected function renderHandler(event:Event):void 
		{
			if (_bounds.equals(_newBounds) || !(parent is Port)) return;
			_bounds = _newBounds.clone();
			drawIn((parent as Port).bounds);
			_valid = true;
		}
 
		protected function removedHandler(event:Event):void 
		{
			if (parent is Port) clear();
		}
 
		public function drawIn(port:Rectangle):void
		{
			var cPort:Rectangle = port.clone();
			var dRect:Rectangle = 
				new Rectangle(port.x, port.y, _bounds.width, _bounds.height);
			var iRect:Rectangle;
			cPort.x = 0;
			cPort.y = 0;
			iRect = cPort.intersection(_bounds);
			if (!iRect.isEmpty())
			{
				dRect.width = iRect.width;
				dRect.height = iRect.height;
				dRect.x += iRect.x;
				dRect.y += iRect.y;
				drawInBounds(dRect);
			}
			else if (cPort.containsRect(_bounds))
			{
				dRect.x += _bounds.x;
				dRect.y += _bounds.y;
				drawInBounds(dRect);
			}
			else clear();
		}
 
		protected function clear():void
		{
			graphics.clear();
			_visibleBounds.x = 0;
			_visibleBounds.y = 0;
			_visibleBounds.width = 0;
			_visibleBounds.height = 0;
			_hasVisibleParts = false;
		}
 
		protected function drawInBounds(rect:Rectangle):void
		{
			_hasVisibleParts = true;
			_visibleBounds.x = rect.x;
			_visibleBounds.y = rect.y;
			_visibleBounds.width = rect.width;
			_visibleBounds.height = rect.height;
			graphics.clear();
			graphics.beginFill(_color, _alpha);
			graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
			graphics.endFill();
		}
	}
 
}
Port.as
Код AS3:
package com.aditall.flexibles 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Rectangle;
 
	/**
	 * Port class.
	 * @author wvxvw
	 */
	public class Port extends Sprite
	{
		protected var _bounds:Rectangle = new Rectangle();
		protected var _invalidLayout:Boolean;
		protected var _updater:Event = new Event(Event.RENDER);
 
		public override function get x():Number { return _bounds.x; }
 
		public override function set x(value:Number):void 
		{
			if (_bounds.x == value) return;
			_bounds.x = value;
			invalidLayout = true;
		}
 
		public override function get y():Number { return _bounds.y; }
 
		public override function set y(value:Number):void 
		{
			if (_bounds.y == value) return;
			_bounds.y = value;
			invalidLayout = true;
		}
 
		public override function get width():Number { return _bounds.width; }
 
		public override function set width(value:Number):void 
		{
			if (_bounds.width == value) return;
			_bounds.width = value;
			invalidLayout = true;
		}
 
		public override function get height():Number { return _bounds.height; }
 
		public override function set height(value:Number):void 
		{
			if (_bounds.height == value) return;
			_bounds.height = value;
			invalidLayout = true;
		}
 
		public function Port()
		{
			super();
			addEventListener(Event.RENDER, renderListener);
			addEventListener(Event.ADDED_TO_STAGE, addedHandler);
			dispatchEvent(_updater);
		}
 
		private function addedHandler(e:Event):void 
		{
			renderHandler(null);
		}
 
		private function renderListener(event:Event):void 
		{
			removeEventListener(Event.RENDER, renderListener);
		}
 
		public function get bounds():Rectangle { return _bounds; }
 
		public function get invalidLayout():Boolean { return _invalidLayout; }
 
		public function set invalidLayout(value:Boolean):void 
		{
			if (value === _invalidLayout) return;
			if (value) addEventListener(Event.ENTER_FRAME, renderHandler);
			else removeEventListener(Event.ENTER_FRAME, renderHandler);
			_invalidLayout = value;
		}
 
		private function renderHandler(event:Event):void 
		{
			var i:int = numChildren;
			graphics.clear();
			graphics.beginFill(0, .2);
			graphics.drawRect(_bounds.x, _bounds.y, _bounds.width, _bounds.height);
			graphics.endFill();
			while (i--) getChildAt(i).dispatchEvent(_updater);
			invalidLayout = false;
		}
 
	}
 
}
Недоделано, но, понять можно, что имелось в виду...
__________________
Hell is the possibility of sanity

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

Теги
игра , масштаб , поле , скролл

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

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


 


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


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