Вторник, 23 Апреля 2024, 16:45

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 5 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Форум игроделов » Записи участника » TreinDSM [117]
Результаты поиска
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 добавляется на сцену родительского приложения.
Форум игроделов » Записи участника » TreinDSM [117]
  • Страница 5 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг