Результаты поиска
| |
TreinDSM | Дата: Пятница, 09 Ноября 2012, 20:25 | Сообщение # 81 | Тема: Управление мышью - стены, остановка движения. |
почетный гость
Сейчас нет на сайте
| B@rney, Еще раз уточню. Объект перемещения (fish), является child'ом объекта wall? И ты проверяешь столкновение wall и fish? Что из себя вообще представляет wall?
|
|
| |
TreinDSM | Дата: Пятница, 09 Ноября 2012, 20:20 | Сообщение # 82 | Тема: Зациклить создание Массива |
почетный гость
Сейчас нет на сайте
| danone, Quote Но сделал такую же структуру, но мне возвращает результат:
В ответ на что Вам возвращают такой результат? И в каком случае Вы хотели получить ниже представленный результат?
Я так понимаю, Вы просто трейсите вектор Ваших моделей зданий. Если у класс, отвечающего за здание не определен метод toString(), то при распечатке будет выдаваться имя класса, что мы и видим.
Классы описываете Вы сами. В цикле можно создавать объекты. Я в 4-м сообщении, во втором листинге привел пример, как можно получить массив из массивов значений здания. Если очень хочется, то можно получить массив из нетипизированных объектов: Code var mainArray:Array = new Array(); for each(var item:XML in xml.building) { var obj = { type: item.attribute("type"), title: item.attribute("title"), image: item.attribute("image"), infoArray: item.children() }; mainArray.push(obj); }
Но еще раз повторюсь, что такой подход порочен - Вы получите массив, при работе с которым никогда не сможете поручиться наверняка, что в нем есть и что это такое. Гораздо лучше не лениться и описать необходимое кол-во моделей, в которых будут четко определены необходимые свойства. Тем более что по приведенной структуре конфига модели достаточно однообразны и различаются в основном значением свойств.
|
|
| |
TreinDSM | Дата: Пятница, 09 Ноября 2012, 17:27 | Сообщение # 83 | Тема: Управление мышью - стены, остановка движения. |
почетный гость
Сейчас нет на сайте
| B@rney, От такой архитектуры попахивает скверной. Корректней было бы иметь модуль, представляющий собой игровую локацию, внутри которого находились бы модули препятствия, стены, персонажи. Персонаж перемещался бы внутри игровой локации и сталкивался с объектами препятствиями.
|
|
| |
TreinDSM | Дата: Пятница, 09 Ноября 2012, 10:16 | Сообщение # 84 | Тема: Игра для в контакте |
почетный гость
Сейчас нет на сайте
| В игре будет, будет, будет... Чего в ней только не будет. Игры еще нет, а все в ней уже будет.
|
|
| |
TreinDSM | Дата: Пятница, 09 Ноября 2012, 09:53 | Сообщение # 85 | Тема: Управление мышью - стены, остановка движения. |
почетный гость
Сейчас нет на сайте
| B@rney, Quote только рыба у меня находиться внутри мувиклипа wall Объект, который нужно проверять на столкновение с препятствием, находится внутри самого препятствия?
|
|
| |
TreinDSM | Дата: Четверг, 08 Ноября 2012, 22:15 | Сообщение # 86 | Тема: Управление мышью - стены, остановка движения. |
почетный гость
Сейчас нет на сайте
| Ну например вот так: Code var oldPoint:Point = new Point(0,0); // Тут нужны стартовые координаты объекта. Появляется он, надеюсь, в свободной точке
function update(e:Event):void { if (fish.hitTestObject(wall)) { if(oldPoint.x+fish.width < wall.x && fish.x+fish.width>wall.x) // врезались в стену слева { fish.x = wall.x-fish.width; } else if(oldPoint.x > wall.x+wall.width && fish.x < wall.x+wall.width) // врезались в стену справа { fish.x = wall.x+wall.width; } else if(oldPoint.y+fish.height < wall.y && fish.y+fish.height>wall.y) // врезались в стену сверху { fish.y = wall.y+fish.height; } else if(oldPoint.y > wall.y+wall.height && fish.y < wall.y+wall.height) // врезались в стену снизу { fish.y = wall.y+wall.height; } oldPoint = new Point(fish.x, fish.y); } else { oldPoint = new Point(fish.x, fish.y); TweenMax.to(fish, 2 ,{x :mouseX, y: mouseY}); } }
Достаточно топорно, но почему бы и нет. Честно говоря, на работоспособность не проверял, но явных косяков вроде как не вижу.
|
|
| |
TreinDSM | Дата: Четверг, 08 Ноября 2012, 21:29 | Сообщение # 87 | Тема: Управление мышью - стены, остановка движения. |
почетный гость
Сейчас нет на сайте
| B@rney, Я про столкновение с мышью и не говорил.
Ну поскольку твин все одно по каждому ENTER_FRAME запускается, то можешь проверять, как сказал ggman: твойПерсонаж.hitTestObject(стена). Однако, как я уже говорил, нужно учитывать возможность "проскочить препятствие" при малых размерах персонажа и препятствия.
|
|
| |
TreinDSM | Дата: Четверг, 08 Ноября 2012, 21:16 | Сообщение # 88 | Тема: Управление мышью - стены, остановка движения. |
почетный гость
Сейчас нет на сайте
| Если пользоваться для перемещением не твином, а просто прибавлять по ENTER_FRAME некоторый шаг по направлению к позиции мыши, то можно каждый раз проверять на столкновение с препятствием. Если подобное столкновение произошло, то ставить объект на позицию предшествующую препятствию. Однако при большом шаге и маленьких размерах препятствия есть опасность его просто "проскочить". Если пользоваться твином, то нужно туда передавать не координаты мыши, а координаты просчитанные с учетом возможного препятствия. Если препятствие на векторе движения нет, то это будут координаты мыши, если есть, то координаты точки пересечения вектора направления и стороны препятствия.
|
|
| |
TreinDSM | Дата: Четверг, 08 Ноября 2012, 09:57 | Сообщение # 89 | Тема: Подгрузка swf в swf |
почетный гость
Сейчас нет на сайте
| События сами по себе ничего не делают, они лишь сигнализируют о различных ситуациях.
Если Вам нужно события окончание загрузки, то подписаться на него можно так:
var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteListener);
Сообщение отредактировал TreinDSM - Четверг, 08 Ноября 2012, 09:58 |
|
| |
TreinDSM | Дата: Среда, 07 Ноября 2012, 10:02 | Сообщение # 90 | Тема: Подгрузка swf в swf |
почетный гость
Сейчас нет на сайте
| Легенда Flash, почти как и всякая профессиональная игра в социалке - комплексный проект, который включает в себя некоторый удаленный сервер, javaSciript-овый интерфейс, в который встраивается флешка и саму флешку. Флешка тоже составная. Есть некоторый флешовый загрузчик, который встраивается в ExternalInterface. Цель данного загрузчика проста - подгрузить в себя управляющую флешку и визуализировать процесс загрузки. Когда загрузка завершена, загрузчик добавляет управляющую флешку себе на сцену (естественно из своего отображения все лишнее убирает). Дальше всем занимается управляющая флешка. Она получает данные о доступных играх и выдает их пользователю в виде некоторого меню. Когда пользователь выбирает некоторую игру, управляющая флешка убирает ставшее не нужным меню (не себя, а меню) и подгружает нужную игру. После подгрузки, она добавляет себе на сцену подгруженную игру. Когда пользователь выходит обратно в меню, управляющая флешка убирает контейнер с игрой и возвращает контейнер с меню.
Упрощенно, такая схема. В реальности естественно, процесс сложнее, так флешка достаточно активно работает с javaSciript-овый интерфейсом.
Само собой разумеется, что игра не создавалась путем написания кода в кадре (еще раз повторюсь сложный разветленный код писать в кадре достаточно проблематично). С учетом бедности графики управляющего приложения, не удивлюсь, если он реализован полностью программным методом.
|
|
| |
TreinDSM | Дата: Вторник, 06 Ноября 2012, 22:23 | Сообщение # 91 | Тема: Зациклить создание Массива |
почетный гость
Сейчас нет на сайте
| Взрыв мозга - это то как Вы формулируете проблему.
Я без понятия как у Вас выглядит структура xml-ного конфига. Предположим, что там по тегам разбиты наборы свойств зданий различного вида. Например, вот так: Code <buildings>
<building id="0" type="0"> <name>Школа</name> <capacity>100</capacity> </building>
<building id="1" type="1"> <name>Банк</name> <cost>1500</cost> </building>
<building id="2" type="2"> <name>Участок</name> <capacity>100</capacity> <armor>1.5</armor> </building>
</buildings>
Вы можете пробежаться по списку зданий и запихать все их свойство по массивам следующим образом: Code var mainArray:Array = new Array(); for each(var item:XML in xml.building) { var locArray = new Array(); var i:int = 0; while(i<item.attribute().length) { locArray.push(item.attribute(i)); i++; } i= 0; while(i<item.children().length) { locArray.push(item.children(i)); i++; } mainArray.push(locArray); }
Таким образом пробегаем по всем атрибутам и тегам конфига.
Однако массив нетипизированных массивов - это грех в глазах императора. Делать так весьма дурной тон. Я бы сделал бы общий интерфейс под модель данных здания. Если применительно к моему примеру, то вот такой: Code interface IBuildingModel { function init(xml:XML):void;
function get id():int;
function get type():int; }
Потом бы сделал модели зданий, которые имплементят данные интерфейс. Моделей было бы столько, сколько есть уникальных типов зданий. По примеру - их три: школа, банк, участок. Каждая из моделей точно бы знала, какими свойствами она может обладать. Примерно так: Code class School implements IBuildingModel { private var _id:int; private var _type:int; private var _name:String; private var _capacity:int; public function School() {
}
public function init(xml:XML):void { _id = parseInt(xml.attribute("id")); _type= parseInt(xml.attribute("type")); _name= xml.attribute("name"); _capacity= parseInt(xml.child("capacity")); }
public function get type():int { return(_type); }
public function get id():int { return(_id); } }
Участок и банк аналогичным образом, только со своим набором свойств. Когда получаю xml-ку, пробегаюсь по всем структурам в ней, определяю к какому типу ее отнести и создаю нужную модель: Code var list:Vector.<IBuildingModel> = new Vector.<IBuildingModel>() for each(var item:XML in xml.building) { var type:int = parseInt(item.attribute("type")); var model:IBuildingModel; switch(type) { case 0: model = new School(); break
case 1: model = new Bank(); break
case 2: model = new Police(); break; } model.init(item); list.push(model); }
Получаем удобный вектор из вполне понятных моделей зданий.
|
|
| |
TreinDSM | Дата: Вторник, 06 Ноября 2012, 20:16 | Сообщение # 92 | Тема: Зациклить создание Массива |
почетный гость
Сейчас нет на сайте
| Взрыв мозга...
В каком виде Вам с сервера приходят значения для "разных построек"?
|
|
| |
TreinDSM | Дата: Понедельник, 05 Ноября 2012, 22:09 | Сообщение # 93 | Тема: Подгрузка swf в swf |
почетный гость
Сейчас нет на сайте
| У Вас код в кадре timeline'a что ли? Писать хоть сколько-нибудь сложный код в кадре достаточно проблематично. Все-таки это больше для каких-нибудь скриптовых команд - запустить анимацию по щелчку, перейти в нужный кадр, спрятать объект.
Если не хотите менять, то можете, например, по добавлению загруженной swf-ки пробегаться по всем символам на сцене основной флешки и скрывать их. Можно по instance name символов: Code button.visible = false;
Можно по child'ам: Code var i:int = 0; while(i<this.numChildren) { this.getChildAt(i).visible = false; i++; } Естественно во втором случае это нужно делать до добавления лоадера на сцену иначе его тоже скроет. Когда нужно все вернуть обратно - убираете лоадер и проводите ту же операцию, только вместо visible = false, visible = true.
Но еще раз повторюсь, все это весьма не комильфо и дурной тон.
|
|
| |
TreinDSM | Дата: Понедельник, 05 Ноября 2012, 20:08 | Сообщение # 94 | Тема: Подгрузка swf в swf |
почетный гость
Сейчас нет на сайте
| Я ж не знаю, как там у Вас все завязано. Можно например вот так: Code package { import flash.display.Sprite; import flash.events.Event;
/** * ... * @author Dima */ public class Main extends Sprite { private var _app:AppControl = null; // 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); // entry point
_app = new AppControl(); this.addChild(_app.view); _app.init(); }
}
}
Code package { import flash.display.DisplayObject; import flash.display.Sprite; /** * ... * @author Dima */ public class AppControl { private var _mainView:Sprite = new Sprite(); private var _appView:AppView = new AppView(); // private var _manager:SwfManager = new SwfManager(); // private var var _curView:DisplayObject = null; // public function AppControl() {
} // public function init():void { _mainView.addChild(_appView); _curView = _appView; } // private function newSwfToScene(url:String):void { if (_curView) { if (_curView.parent) { _curView.parent.removeChild(_curView); } } _curView = _manager.getNewSwf(url); _mainView.addChild(_curView); } // private function toMainView():void { if (_curView) { if (_curView.parent) { _curView.parent.removeChild(_curView); } } _curView = _appView; _mainView.addChild(_curView); } // public function get view():Sprite { return(_mainView); } }
}
Code package { import flash.display.DisplayObject; import flash.display.Loader; import flash.net.URLRequest; /** * ... * @author Dima */ public class SwfManager {
public function SwfManager() {
} // public function getNewSwf(url:String):DisplayObject { var loader:Loader = new Loader(); loader.load(new URLRequest(url)); return(loader); } }
}
newSwfToScene и toMainView вызывайте, когда нужно грузить новую swf-ку или вернуться к основному отображению.
Код, понятно, упрощенный, но общий принцип в общем-то рабочий.
|
|
| |
TreinDSM | Дата: Понедельник, 05 Ноября 2012, 19:08 | Сообщение # 95 | Тема: Подгрузка swf в swf |
почетный гость
Сейчас нет на сайте
| У Вас есть исполняемая swf-ка, которая подгружает в себя другую swf-ку через loader. Если Вы хотите, чтобы после добавлении loader на сцену в отображении не присутствовали элементы из родительской swf-ки, то их надо удалить со сцены.
|
|
| |
TreinDSM | Дата: Понедельник, 05 Ноября 2012, 17:56 | Сообщение # 96 | Тема: Проблема с сокетами |
почетный гость
Сейчас нет на сайте
| Ошибку он выдает, потому что в сокете нет никаких данных.
Когда создаете сокет, нужно подписаться на событие Event.CONNECT.
После того, как это событие произойдет можно пытаться туда что-то передать. А чтобы принимать оттуда информацию, по событию CONNECT подпишитесь на событие ProgressEvent.SOCKET_DATA. Когда такое событие произойдет, можно вызывать методы read - ибо в сокете есть данные.
|
|
| |
TreinDSM | Дата: Понедельник, 05 Ноября 2012, 16:56 | Сообщение # 97 | Тема: Как передать название переменной в метод? C# |
почетный гость
Сейчас нет на сайте
| В теле метода GUITimer: Code Type t = this.GetType();
PropertyInfo p = t.GetProperty(varName);
p.SetValue(this, guiEnabled, null);
|
|
| |
TreinDSM | Дата: Понедельник, 05 Ноября 2012, 14:48 | Сообщение # 98 | Тема: Подгрузка swf в swf |
почетный гость
Сейчас нет на сайте
| Ну например завести в родительском приложение отдельный класс, представляющий чисто отображение всего приложения, какой-нить mainView. Объект этого класса всегда присутствует на сцене. Визуальный интерфейс самого приложения, скажем appView добавляется в качестве child'a в mainView. Когда приложение инициирует загрузку другой swf'ки и добавление ее на сцену оно удаляет свой визуальный интерфейс appView из mainView и добавляет туда загруженную swf-ку. Когда же приходит пора удалить загруженный клип, то верни appView обратно на сцену mainView.
|
|
| |
TreinDSM | Дата: Понедельник, 05 Ноября 2012, 10:04 | Сообщение # 99 | Тема: Вдохновение |
почетный гость
Сейчас нет на сайте
| Нет я конечно понимаю, что игрострой вещь творческая и вдохновение нам не чуждо, но, черт возьми, мы же не картины пишем. Игрострой - это как разработка автомобиля или проектировка небоскреба. Нужно оценивать прикладную составляющую проекта, особенности жанра, тонкости технологии, анализировать бесчисленное множество нюансов. Нередко приходится решать наскучнейшие, но необходимые задачи. Нередко приходится сталкиваться с технологически непростыми вещами, которые опять же необходимо решить. Нередко приходится перелопачивать уже реализованные моменты, потому что в них не укладывается какая-то новая задумка. Если кто-то не готов столкнуться с подобными трудностями, то очевидно, что разработка игр не для Вас.
|
|
| |
TreinDSM | Дата: Понедельник, 05 Ноября 2012, 09:43 | Сообщение # 100 | Тема: Подгрузка swf в swf |
почетный гость
Сейчас нет на сайте
| smit1987, Естественно, loader добавляется на сцену родительского приложения.
|
|
| |
|