|
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
Игровое поле
товарищи, есть ли у кого-нить пример кода игрового поля, которое бы при нажатой кнопке мыши передвигалось (т.е. поле, например, 1000х1000, а видимая область только 200х200), а при прокручивании колесика мыши менялся бы масштаб?
|
|
|||||
(MouseEvent.MOUSE_DOWN, startDragField) ;
(MouseEvent.MOUSE_UP, stopDragField) ; (MouseEvent.MOUSE_WHEEL, changeScale); это совсем не трудно и писать не много |
|
|||||
А давайте вы ТЗ сразу скинете... мы тут всем форумом соберемся, распределим задачи и через пару часов сделаем вам игрушку...
Сорри конечно, но чет мне кажется нет в посте автора конкретной задачи, с решением которой возникли проблемы... |
|
|||||
Регистрация: Jun 2009
Сообщений: 64
|
пока лишь начинаю изучать as.
хотелось бы посмотреть как это устроено в существующих играх. я не прошу никого написать этот код для меня. просто если он у кого-нить уже есть - поделитесь плз. заранее спасибо! |
|
|||||
Modus ponens
|
Renderable.as
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(); } } } 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. |
|
« Предыдущая тема | Следующая тема » |
Теги |
игра , масштаб , поле , скролл |
|
|