Давайте сделаем игру на as3

govnoproger.ru > as3 > Давайте сделаем игру на as3

Создал новую рубрику на блоге — as3.

И сразу-же предлагаю поучаствовать в создании игры.

Знания as3 не требуются. Требуется только желание создавать графику для игры (юниты и тп).
Создавать нужно по определённым правилам, иначе толку в создании нет никакого.

Юниты, графику можете рисовать где угодно, но юнит должен быть мувиком в flash’е. В флэше разобраться не трудно. Полный нуб за один час, научится создавать мувики.

В случае монетизации игры доход будет 80 на 20 (20 ваши).

Для первый игры я выбрал весьма сложную пассивную стратегию на тему защиты базы.
Писать я её буду долго, и нудно.
Юниты в ней маленькие и простые, но думаю их будет много. Самое важное — это соблюдать правила. Если кто согласится, то будет пост на тему правил. Писать тут, в комменты.

Хотите вы или нет, а я уже начал.

Рекомендую:

4.7.2011 | последняя редакция: 13.07.2011 |
  1. ты бы сделал анонс этого поста где-нибудь на форумах и т.п

  2. admin
    4.7.2011 в 08:17

    На форумах народу много, но они обычно не способны ни на что кроме развода срача друг с другом.

    А так мало ли кто из читателей. В любом случае я могу сделать и один.

  3. Сергей
    4.7.2011 в 15:29

    Всегда мечтал. Только нифига не знаю по as3 =) А вообще было бы круто если бы ты, делая игру, делился каждым этапом… Ну или даже чаще, типа туториала 🙂

  4. admin
    4.7.2011 в 19:01

    Я не понял, так ты будешь рисовать юниты?

  5. Сергей
    4.7.2011 в 19:30

    Сори, нет… Не люблю и не умею ) Просто хотелось бы в части кодинга почерпнуть инфы, я об этом.

  6. admin
    4.7.2011 в 20:28

    А что тут подчёркивать? Мои знания взяты из случайных мест. Что-то со справки от адоба, что-то с форумов. В принципе, для создания первой игры тебе хватит справки адоба.
    Делая по ней будет простенькая игрушка.
    Пускай объекты в ней будут чистыми мувиклипами.

    Самое сложное — это заставить себя что-либо делать, открыть справку для начала, особенно зная, что готового результата может и не быть даже через месяц.

    Если хочешь подчеркнуть инфы, могу придумать простое задание на as3 — по нему потренируешься. Требуются базовые знания программирования и умение гуглить. Задание будет специально под gamedev.
    Вот в этом есть смысл.

  7. Сергей
    5.7.2011 в 15:32

    «подчеркнуть инфы»
    Эм… Я писал почерпнуть, ну не суть 🙂

    По поводу остального — да, согласен. Лень к несчастью 🙂 По справке — вообще беда как лазить не люблю. В основном стараюсь лезть в неё уже имея неплохие знания в чём-то. Предпочитаю «специализированные» (охватывающие узкие вопросы) туториалы 🙂 По поводу задания — не откажусь, т.к. тебе уже виднее какое будет простое 🙂

  8. admin
    5.7.2011 в 15:57

    А по поводу справки ты зря.
    У адоба, как и у пхп богатая справка на сайте.
    У адоба даже кое-чем лучше.

    Хорошо.

    Перед тем как выполнять.
    В флеше есть два стиля кодинга — первый код пишется на таймлайне.
    Второй тип — весь код идёт в файлах. На таймлане нету, ну или почти.

    Можешь пока использовать первый тип тк сэкономишь время.

    Вот задание:
    1) Создай мувиклип- например нарисуй внутри квадрат.
    2) используя код расплоди квадрат. То-есть сделай чтобы при запуске ролика было штук 20 рандомно.
    3) Поверни все квадраты одновременно со скоростью один градус (не важно по часовой или против).

    Используя гугл выполни всё что я написал. Если какое-то слово непонятно — гугл!

    Важно именно используя код а не просто нарисовать 20 штук!

  9. Сергей
    6.7.2011 в 19:21

    Мда, что-то пока что никак не получается «клонировать» MovieClip. Создать смог, вращение добавил, но копии сделать не понимаю пока что как. Например с помощью кода создать много квадратов с одинаковыми параметрами я смог, но именно создать, а не копировать…

  10. admin
    6.7.2011 в 21:51

    Покажи код.
    чтобы вставить код в коммент пиши
    code lang=»as3″ [/code]
    code lang=язык в квадратных скобках. Язык в двойных кавычках.

  11. Сергей
    7.7.2011 в 01:30
    import flash.events.Event;
    import flash.display.Shape;
    
    var s_width:uint = stage.stageWidth;
    var s_height:uint = stage.stageHeight;
    var num_of_kv:uint = 20; // количество квадратов
    var kv_side:uint = 25; // длина стороны квадрата
    var direction_and_speed:Number = -1; // направление и скорость вращения квадратов: полож. - по часовой, отриц. - против
    
    // создаём массив для "квадратов"
    var kvadrat:Array = new Array(num_of_kv);
    
    // заполняем массив и выводим в рандомные позиции квадраты
    for (var i:uint = 0; i < num_of_kv; i++)
    {
    	kvadrat[i] = new Shape();
    	kvadrat[i].graphics.beginFill(0x000000, 1);
    	kvadrat[i].graphics.drawRect(-(kv_side/2), -(kv_side/2), kv_side, kv_side);
    	kvadrat[i].graphics.endFill();
    	// рандом и ограничение области появления квадратов областью сцены:
    	kvadrat[i].x = Math.random()*(s_width-kv_side*2)+kv_side;
    	kvadrat[i].y = Math.random()*(s_height-kv_side*2)+kv_side;
    	// добавляем к сцене:
    	addChild(kvadrat[i]);
    }
    
    // с каждым новым кадром добавляем значение к градусу угла поворота каждого квадрата
    function kvadrat_rotate(event:Event):void
    {
    	for (var i:uint = 0; i < num_of_kv; i++)
    	{
    		kvadrat[i].rotation += direction_and_speed;
    	}
    }
    
    // что будем вызывать в начале каждого кадра
    addEventListener(Event.ENTER_FRAME, kvadrat_rotate);
    

    P.S. Очень сомневаюсь что у меня тут всё по правилам. Поправь меня, ибо я чувствую что наморозил ерунды местами.

  12. admin
    7.7.2011 в 01:44

    В принципе ты сделал всё верно. Только я бы не рисовал квадрат кодом. Это весьма геморно!
    Только представь если бы ты рисовал каждый юнит кодом!

    Я бы сделал мувиклип, задал ему linkage и расплодил бы его экземпляры.

    Хорошо вторая чать:
    1) Сделай так чтобы квадраты двигались рандомно по событию энтерфрейм.
    2) Вращать квадраты больше не нужно,теперь проверь их на столкновение!
    Если квадраты столкнуться сделай trace(«столкновение»);

    Важно чтоб ты научился делать именно мувиклипы с linkage.
    Линкэйдж сделать просто. Нажми правой кнопкой на мувиклип — дальше пропертис -дальше export to actionscript. Дальше там где класс введи имя. Теперь используя это имя мувиклип доступен в коде и с ним можно работать.

  13. Сергей
    7.7.2011 в 12:50

    Спасибо огромное! По поводу рисования кодом — это я понимаю, поэтому и пытался как-то использовать мувиклип. Собственно использовать то я и смог, только размножить не мог, но теперь кажется понял. По поводу столкновений — ожидал и побаивался, но счас возьмусь и посмотрим так ли всё страшно 🙂

  14. admin
    7.7.2011 в 13:42

    По поводу столкновений:
    Нарисуй на бумаге 2 прямоугольника.
    Докажи сталкиваются они или нет.

    На всякий случай напишу что стороны разных квадратов перпендикулярны.
    Квадраты не лежат под острыми углами друг к другу.

  15. Сергей
    7.7.2011 в 16:31

    Вот блин… Если б не увидел этот пост то подумал бы что не стоит заморачиваться… Просто я сначала хотел создать функцию просчёта столкновений, но неожиданно понял что умные дядьки за меня всё уже сделали, увидя hitTestObject(). Пожалуй для общего развития мне неплохо бы самому попробовать написать подобную функцию… Но пока что счас покажу код, который у меня получился с вышеуказанной функцией…

  16. Сергей
    7.7.2011 в 16:34

    Функция col_check должна была быть функцией просчёта собственно, но я решил оставить её для наглядности и, возможно, попытки написания её позже. Скажи плиз, правильно ли я её объявил (или как это тут называется) и вызвал?

    import flash.events.Event;
    import flash.display.Shape;
    
    var s_width:uint = stage.stageWidth;
    var s_height:uint = stage.stageHeight;
    var num_of_m_cl:uint = 3; // количество копий MovieClip'а
    var num_of_collisions:uint = 0;
    
    // создаём массив для копий MovieClip'ов
    var m_clip:Array = new Array(num_of_m_cl);
    
    // заполняем массив и выводим в рандомные позиции MovieClip'ы
    for (var i:uint = 0; i < num_of_m_cl; i++)
    {
    	m_clip[i] = new class_square_1();
    	// рандом и ограничение области появления MovieClip'ов областью сцены:
    	m_clip[i].x = Math.random()*s_width;
    	m_clip[i].y = Math.random()*s_height;
    	// добавляем к сцене:
    	addChild(m_clip[i]);
    }
    
    // перемещаем MovieClip'ы и проверяем результат на столкновения:
    function move_and_col_check(event:Event):void
    {
    	// перемещение:
    	for (var i:uint = 0; i < num_of_m_cl; i++)
    	{
    		m_clip[i].x = Math.random()*s_width;
    		m_clip[i].y = Math.random()*s_height;
    	}
    	// проверка столкновений:
    	num_of_collisions = 0;
    	for (var i:uint = 0; i < num_of_m_cl-1; i++)
    	{
    		for (var ii:uint = i+1; ii < num_of_m_cl; ii++)
    		{
    			col_check(i, ii);
    		}
    	}
    	if (num_of_collisions > 0)
    	{
    		trace(num_of_collisions);
    	}
    }
    
    // что будем вызывать в начале каждого кадра
    addEventListener(Event.ENTER_FRAME, move_and_col_check);
    
    function col_check(i, ii):void
    {
    	if (m_clip[i].hitTestObject(m_clip[ii]))
    	{
    		num_of_collisions ++;
    	}
    }
    
  17. Сергей
    7.7.2011 в 16:36

    Блин, походу теги не прально написал… сори, удали этот пост если хочешь.

  18. Сергей
    7.7.2011 в 16:39

    Кстати, я не уверен (в принципе можно проверить, но я пока что не проверял), но похоже hitTestObject() просчитывает столкновения не контейнеров, а попиксельно 0_0 Ну типа в зависимости от альфа-канала… Хотя не знаю, мне это воспоминания о DirectDraw навеяли

  19. admin
    7.7.2011 в 20:50

    Собственно
    1) сделай не хиттестом, а просто условием
    2) у тебя проверяются все мувиклипы со всеми. Это не экономно.
    Оптимизируй его. Проверяй близлежащие.

    Хиттест это самое медленное что есть.

    По поводу то го правильно ли ты объявил:
    Сойдёт, я обычно делаю так:

    enterframe()
    
    цикл 1 перебора юнитов
    цикл 2 проверки столкновения
    проверим(obj1,obj2)
    конец цикла 2
    конец цикла 1
    
    проверим(obj1,obj2)
    Функция проверяет 2 объекта,
    она возвращает либо да,  либо нет 
    
  20. Сергей
    7.7.2011 в 23:45

    По поводу второго пункта не согласен, т.к. во втором цикле for у меня идёт отталкивание от последнего проверенного объекта в первом цикле for и количество сверяемых объектов постоянно уменьшается, но может я не прав, сообщи плиз.

    Остальное вот так придумал:

    import flash.events.Event;
    import flash.display.Shape;
    
    var s_width:uint = stage.stageWidth;
    var s_height:uint = stage.stageHeight;
    var num_of_m_cl:uint = 3; // количество копий MovieClip'а
    var num_of_collisions:uint = 0;
    var collis_dist_x:Number = 0;
    var centers_dist_x:Number = 0;
    var collis_dist_y:Number = 0;
    var centers_dist_y:Number = 0;
    
    // создаём массив для копий MovieClip'ов
    var m_clip:Array = new Array(num_of_m_cl);
    
    // заполняем массив и выводим в рандомные позиции MovieClip'ы
    for (var i:uint = 0; i < num_of_m_cl; i++)
    {
    	m_clip[i] = new class_square_1();
    	// рандом и ограничение области появления MovieClip'ов областью сцены:
    	m_clip[i].x = Math.random()*s_width;
    	m_clip[i].y = Math.random()*s_height;
    	// добавляем к сцене:
    	addChild(m_clip[i]);
    }
    
    // перемещаем MovieClip'ы и проверяем результат на столкновения:
    function move_and_col_check(event:Event):void
    {
    	// перемещение:
    	for (var i:uint = 0; i < num_of_m_cl; i++)
    	{
    		m_clip[i].x = Math.random()*s_width;
    		m_clip[i].y = Math.random()*s_height;
    	}
    	// проверка столкновений:
    	num_of_collisions = 0;
    	for (var i:uint = 0; i < num_of_m_cl-1; i++)
    	{
    		for (var ii:uint = i+1; ii < num_of_m_cl; ii++)
    		{
    			if (col_check(i, ii))
    			{
    				num_of_collisions ++;
    			}
    		}
    	}
    	if (num_of_collisions > 0)
    	{
    		trace(num_of_collisions);
    	}
    }
    
    // что будем вызывать в начале каждого кадра
    addEventListener(Event.ENTER_FRAME, move_and_col_check);
    
    // рассчёт столкновений с учётом возможных различий размеров сверяемых юнитов:
    function col_check(i, ii):Boolean
    {
    	collis_dist_x = ((m_clip[i].width / 2) + (m_clip[ii].width / 2));
    	centers_dist_x = Math.abs(m_clip[i].x - m_clip[ii].x);
    	collis_dist_y = ((m_clip[i].height / 2) + (m_clip[ii].height / 2));
    	centers_dist_y = Math.abs(m_clip[i].y - m_clip[ii].y);
    	if ((collis_dist_x >= centers_dist_x) && (collis_dist_y >= centers_dist_y))
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    

    Готов быть забросан гнилыми помидорами 🙂

  21. admin
    8.7.2011 в 00:01

    У тебя функция проверки столкновения не оптимизирована до конца.
    Можно ещё.

    И все равно у тебя проверяются все мувиклипы, или почти все.
    У тебя простой двойной цикл. И мне вообще кажется что он будет неправильно работать.

    Давай выясним. Сделай следующее:
    1) оптимизируй функцию col_check.
    2) теперь наш квадрат будет состоять из двух кадров, если есть столкновение — кадр2 — если нету 1. Сделай так чтобы квадрат во втором кадре отличался от первого.
    3)Я тогда не заметил но, в твоей работе квадраты не двигаются, а тупо меняют местоположение. Сделай чтобы они двигались нормально. Не очень быстро и не очень медленно. Чтобы движение было визуальным.

    Попробуй использовать. Давно писал движение квадратов.

    		public function rnd_move()
    		{
    			var ix,iy:Number=0;
    			ix=(randomRange(-2,2));
    			iy=(randomRange(-2,2));
    			
    			if (x+width>=stage.stageWidth-10) ix=-4; 
    			if (x-10<=0) ix=4; 
    			if (y+height>=stage.stageHeight-10) iy=-4; 
    			if (y-10<=0) iy=4; 
    			x+=ix;
    			y+=iy;
    		}
    		
    		public function randomRange(min:Number, max:Number):Number 
    		{
    			return min + Math.random() * (max - min);
    		}
    
  22. admin
    8.7.2011 в 00:38

    Заметил что ты в col_check Math.abs. Не понимаю зачем. У нас ведь прямоугольные столкновения.
    По-моему в col_check тебе нечего оптимизировать.

    Как напишешь кину свою версию прямоугольных столкновений. Или если хочешь можешь сам подумать.

  23. Сергей
    8.7.2011 в 01:42

    Ок, всё прочёл — завтра буду разбираться.

  24. Сергей
    8.7.2011 в 12:40

    По поводу 2 вариантов квадратов… Это в смысле если 2 квадрата сталкиваются то оба меняют цвет (например)? Если 3 то все три меняют и т.д.? Или какой-то один квадрат будет «главным» и менять цвет будет только он при столкновении с остальными?

  25. admin
    8.7.2011 в 12:45

    Если квадрат сталкивается с другим — оба меняют цвет. Если сталкиваются 3 — они все меняют.
    Все что сталкиваются — те меняют.
    Закончилось столкновение — стали прежними.

    Это проще чем тебе кажется.

  26. Сергей
    8.7.2011 в 14:54

    Ды ёлы-палы, ну я тупой ваще… Никак не могу сообразить как поменять мувиклип… Короче я у тебя спрошу кое-что, надеюсь подскажешь, а потом я ещё подумаю. Вот скажи, правильно ли я рассуждаю: я создал новый мувиклип, отличный от первого. Если происходит столкновение — столкнувшиеся мувиклипы типа 1 нужно заменить на мувиклипы типа 2, если столкновения больше нет — нужно заменить мувиклипы 2 на мувиклипы 1. Это правильно? Если да, то я никак не въеду как в ячейке массива заменить один мувиклип на другой… Линкейдж создан у обоих, он разный… Как его использовать в этом случае… хм. У меня одна идея: создать ещё один массив с мувиклипами 2, но это как-то неправильно, я думаю… Может как-то подскажешь?

  27. Сергей
    8.7.2011 в 15:39

    Приехали. То ли я не выспался, то ли что-то ещё, но почему простой код…

    for (var i:uint = 0; i < 3; i++)
    {
    	trace(i);
    }
    

    …у меня повторяется бесконечное кол-во раз? Я думал что если это не слушатель события ENTER_FRAME то выполниться он должен 1 раз… Какая-то беда началась: вдруг начал бесконечно повторяться весь код, а не только слушатель события ENTER_FRAME и начали бесконечно плодиться мувиклипы пипец… С чем это может быть связано?

  28. admin
    9.7.2011 в 00:21

    Есть мувик квадрат. В нём 2 кадра. 1 — обычное состояние. 2 — при столкновении.
    При столкновении делаем kvadrat.gotoAndStop(2);Ну или типа того. Невнимательно читаешь задание.

  29. Сергей
    9.7.2011 в 02:20

    Опа… Так это двумя кадрами решается… Слушай, забегаю вперёд, а в завершённой игре обязательно будет больше одного кадра? Никак нельзя сделать всё на одном?

  30. admin
    9.7.2011 в 04:31

    Не путай понятия:
    есть сцена — на ней есть кадры.
    В игре на сцене может быть один кадр.

    Есть мувиклипы, мувиклипы тоже имеют кадры.

    Научись работать с кадрами.

  31. Сергей
    9.7.2011 в 13:33

    Да, проблема в том что я до сих пор нормально не определил для себя что есть что и как это между собой взаимодействует. Вот ещё один вопрос возник, но его я задам после того как допишу и покажу новый код. Кстати ты продвигаешься по созданию игры?

  32. admin
    9.7.2011 в 13:42

    По части кодинга, да. Нет таких вещей которых я не могу сделать.
    По части анимации всё очень печально.((((

  33. Сергей
    9.7.2011 в 17:08

    Радует то что меня консультирует человек, уверенный в своих знаниях кодинга 🙂 Да блин, рисование и дизайн у меня тоже на ужасном уровне… Как и кодинг 🙂 Чё собсна зашёл… Зашёл сообщить что у меня опять завал какои-то образовался. Движение я реализовал зашибись, теперь квадраты движутся плавно, но началась какая-то жесть со столкновениями… С их просчётом. Ох… даж не знаю с чего начать… В общем, во-первых хотел узнать у тебя о твоём цикле перебора, он у тебя не из 2 for, как я понимаю? Вопрос в том постоянное ли количество перебираемых объектов в твоём варианте цикла, если общее количество объектов сцены неизменно? То есть, например, для 5 объектов количество проверок (вызовов функции проверки) будет всегда одинаковым, или от чего-то зависящим? …Пока писал это — появилась идея, сча проверю и отпишусь дальше…

  34. Сергей
    9.7.2011 в 17:26

    Тьфу ты… Пол дня провозился с ошибкой просчёта, а всё оказалось опять из-за моего непонимания кадров и с ними связанного… Блин, с этим надо что-то делать. Смотри, вот у меня проблема такая: код лежит в первом кадре в отдельном слое (layer’е), первый вариант квадрата (без столкновений) — во втором кадре второго слоя, второй вариант квадрата лежит в третьем кадре второго слоя… Короче куча проблем с этого места. Во-первых возможно ли всё заставить работать как в твоём задании требуется при такой расстановке объектов? Например у меня такие проблемы возникают: если я нарисовал квадрат в том же кадре что и код (независимо от слоя) — этот квадрат получается родителем для копий и дальше в коде я управляю копиями, но не этим квадратом-родителем и он остаётся висеть на сцене в том месте месте где я его нарисовал. Я этого избежал размещением кода и квадрата в разных кадрах… Дальше. При использовании gotoAndStop(), если я перехожу в кадр, отличный от кадра, в котором лежит код — начинаются какие-то проблемы с логикой работы кода… В общем я не знаю как мне разобраться с тем что где и как правильно распологать 🙁

  35. admin
    10.7.2011 в 01:47

    Располагать так: на сцене ничего нет. Только код.
    В библиотеке есть мувиклип квадрат с двумя кадрами.

  36. admin
    10.7.2011 в 02:04

    http://govnoproger.ru/wp-content/uploads/kv.zip

    Держи заготовку. Сэкономит время. Открывать в flash cs5.

  37. Сергей
    10.7.2011 в 02:31

    Спасибо!!![!]

    P.S. Да, а что насчёт моего вопроса по циклу выбора сверяемых объектов?

    «хотел узнать у тебя о твоём цикле перебора, он у тебя не из 2 for, как я понимаю? Вопрос в том постоянное ли количество перебираемых объектов в твоём варианте цикла, если общее количество объектов сцены неизменно? То есть, например, для 5 объектов количество проверок (вызовов функции проверки) будет всегда одинаковым, или от чего-то зависящим?»

  38. admin
    10.7.2011 в 02:43

    По поводу проверок я уже говорил, проверяй близлежащие квадраты.
    Количество проверок в этом случае будет всегда разным.
    Кароче как напишешь так и будет.

    В сообщении 2011.07.07 я написал что у меня два фор в цикле.

  39. Сергей
    10.7.2011 в 02:46

    Хыхы, оказалось что я как раз перед тем как скачал твой вариант сделал у себя точно так же, ну отлично, теперь я наконец уверен что это правильно. Но… 🙂 Короче всё гладко, кроме смены цвета у 2 квадратов… Меняет почему-то либо 2, либо 2… Пока не понял от чего зависит, но буду дальше разбираться…

    Ой ё-моё, когда (если) я добьюсь наконец требуемого результата, то сниму штаны и буду бегать по квартире с криками «аллилуйа»!.. )

  40. Сергей
    10.7.2011 в 02:46

    * То есть либо 1, либо 2, ну ты понял )

  41. admin
    10.7.2011 в 02:51

    Обрати внимание:
    В примере я написал мувиклипу gotoandstop, если бы я этого не написал, мувиклип бы бесконечно проигрывался.

  42. Сергей
    10.7.2011 в 02:53

    Ммм! Окей! Я на это уже обратил внимание, спс

  43. Сергей
    10.7.2011 в 12:39

    Ооо… Не может быть… Похоже это свершилось: http://gamesfirst.xirad.ru/dvizh_kvadraty.swf

  44. admin
    10.7.2011 в 13:13

    Ага, а проверяешь близлежащие?

    Кстати сделал бы себе блог.

  45. Сергей
    10.7.2011 в 14:18

    Про блог — это интересная мысль ) Только я подумал мб лучше было бы подучиться сначала побольше 🙂 По поводу близлежащих — нет 🙁 Пока что нет… А там посмотрим, в зависимости от сложностей будущих задач 🙂 Кстати спасибо огромное за пример того как ты вызываешь и объявляешь функции — теперь так и делаю (передаю и обрабатываю объекты, где это возможно), сегодня кое-что в планах ещё проверить и возможно будет вопросик… А, и объявление переменных одинакового типа через запятую — тоже интересно, не знал что так можно 🙂 И ещё если тело условия короткое — пишу строчкой, а не в скобках, в принципе об этом можно было догадаться, но всё равно спасибо и за этот пример ))

    А что дальше? Какое задание дашь?

  46. admin
    10.7.2011 в 14:37

    Ну задание на этот раз такое — завести блог.
    Это нужно чтобы лучше запомнить в памяти.

    Просто пиши всё, что ты делал.

    Далее зарегай домен, пускай с доменом будет. Домен ру стоит 89 руб. Можно и дешевле.

    Я так и не услышал ты делал проверку близлежащих объектов или проверяешь все?

  47. admin
    10.7.2011 в 14:39

    А вижу не делал близлежащих. Вот это и советую сделать.

  48. Сергей
    10.7.2011 в 16:26

    Ну не знаю, если создавать блог только ради того чтоб не забыть что и куда, то хз стоит ли, можно обойтись и личным дневником (локальным) 🙂 Если честно то никогда не регал доменов, так что даже не знаю куда идти и что для этого делать 🙂

    А по поводу проверок… У тебя получается что на столкновения проверяются все, но не со всеми, так? То есть для каждого юнита будет проведена проверка, но не с каждым? Блин, надо подумать… Кстати если объектов мало то такую «продвинутую» проверку всё равно выгоднее делать?

  49. Сергей
    10.7.2011 в 16:28

    * не регал доменов второго (или какой это site.ru) уровня

  50. Сергей
    10.7.2011 в 16:35

    Да, кстати, получается что всё равно придётся высчитать расстояние между каждым… Или нет? Посто может проще вызывать функцию проверки столкновний (если она конечно не с точностью до пикселя), чем каждый раз проверять расстояние до каждого объекта. Я не знаю, видимо если я к такому выводу прихожу, то наверное неправильно представляю способ определения какие из объектов рядом, а какие нет..

  51. Сергей
    10.7.2011 в 17:06

    Я чуть позже покаху свой «оптимизированный» код проверки столкновений…

  52. Сергей
    10.7.2011 в 17:10

    * покажу

    P.S. нет, ну я конечно понимаю что блог не только для себя делают 😉 но всё же мне на данный момент без него как-то получше.

  53. Сергей
    10.7.2011 в 17:53

    Оч важный вопрос: в твоём варианте проверки число «прокруток» циклов постоянно, а число вызовов функции проверки столкновений переменно, или же даже число повторений циклов переменно? (в связи с искуственным изменением в теле цикла значения переменной-счётчика цикла)

  54. admin
    10.7.2011 в 19:13

    Число прокруток постоянно, а число проверок переменно.
    Даже если пять квадратов выгоднее делать эту проверку.

  55. Сергей
    10.7.2011 в 19:14

    Отлично.

  56. Сергей
    10.7.2011 в 22:32

    Хм, так и не получилось. Вопрос: как правильно создать метод? А конкретнее — у меня сейчас рандомное движение обычной функцией создано, а я хочу «проапгрейдить» её до метода. Вроде как твой пример рандомного движения (он же является методом?). Если я просто вставляю public blablabla в код — на меня ругаются, говоря что должно быть в пакете — создаю package Neme { public blablabla … — говорит что пакет, мол, не ожидается… в чём дело?

  57. Сергей
    10.7.2011 в 22:47

    Наткнулся на вариант создания этого дела во внешнем *.as файле… Пока не проверил этот вариант, но если так можно, то можно ли в самом основном коде создать метод?

  58. admin
    11.7.2011 в 02:48

    Справку адоба посмотри.
    Я ответить могу, но мой ответ эквивалентен справке.

  59. admin
    11.7.2011 в 07:04

    По поводу блога:
    Ну я тоже года 3 назад так считал. Сейчас я жалею об этом.
    По поводу доменов — просто регай где дешевле и всё.

    Ты спросил про метод. Это говорит о том что ты не знаком с концепцией ооп.

    Метод это функция в классе. Все больше ничего. Я крайне рекомендую тебе не сыпать терминологией.

  60. Сергей
    11.7.2011 в 11:40

    Да, с ооп я дело имею впервые 🙂

  61. Сергей
    11.7.2011 в 12:44

    Всё же не придумал как мне оптимизировать проверку. В моей функции проверки и так основу составляет проверка расстояния между объектами… Вычисляется расстояние, меньше которого будет считаться столкновение и затем само расстояние между объектами и собственно условием проверяется меньше ли это расстояние… Подумав как можно избавиться от выполнения этой функции — я написал практически такую же функцию для избавления от неё же )) Короче для меня тут тупик, не могу придумать…

    // рассчёт столкновений:
    function col_check(obj1:Object, obj2:Object):Boolean
    {
    	collis_dist_x = ((obj1.width + obj2.width) / 2);
    	centers_dist_x = Math.abs(obj1.x - obj2.x);
    	collis_dist_y = ((obj1.height + obj2.height) / 2);
    	centers_dist_y = Math.abs(obj1.y - obj2.y);
    	if ((collis_dist_x >= centers_dist_x) && (collis_dist_y >= centers_dist_y))
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    
  62. Сергей
    11.7.2011 в 12:54

    В принципе это вообще можно одним условием записать… Мб это даже чуток быстрее будет?

    function col_check(obj1:Object, obj2:Object):Boolean
    {
    	if ((((obj1.width + obj2.width) / 2) >= Math.abs(obj1.x - obj2.x)) && (((obj1.height + obj2.height) / 2) >= Math.abs(obj1.y - obj2.y)))
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    

    …и даже вне функции 🙂

  63. admin
    11.7.2011 в 12:55

    Начнём с того что у тебя всего один выход. Всё выполняется полностью и всегда.
    Два квадрата в разных углах экрана будут проверяться на столкновения.

    Хотя ты должен избежать этого.
    Если объект не рядом тогда не нужно с ним проверять.

    перейди к следующему объекту используя continue;

    Твой алгоритм столкновений сам по себе не самый лучший. Но ладно.

  64. Сергей
    11.7.2011 в 13:04

    Я вот ещё думаю — оптимизация это конечно круто и обязательно при создании конечного приложения, но при осваивании программирования мне кажется это больше топтание на месте. Как считаешь? Или стоит долюить до посинения? )))

  65. admin
    11.7.2011 в 13:06

    Ну собственно что мешает проверить самому? сделай дофига квадратов и смотри как начнёт тормозить. Думаю 50 квадратов предел для этого алгоритма.

  66. Сергей
    11.7.2011 в 13:06

    * долбить
    …не хватает функции редактирования 🙂

  67. Сергей
    11.7.2011 в 13:08

    Так я не спорю что алгоритм дерьмо и с ним далеко не уплывёшь, просто заменить его недолго (ну придумать дольше, но это скорее матиматика), но от этого по части кодинга я нового не узнаю, имхо… Я думаю так )

  68. Сергей
    11.7.2011 в 13:11

    * математика
    пля = )

  69. admin
    11.7.2011 в 13:15

    Возьми проверь ради интереса.

  70. Сергей
    11.7.2011 в 13:20

    Ок, сча

  71. Сергей
    11.7.2011 в 13:24

    При 50 фпс держится, при сотне падает где-то на половину.

  72. admin
    11.7.2011 в 13:25

    Ну вот, твоя игрушка просела на половину при 50 пульках.

  73. Сергей
    11.7.2011 в 13:30

    Кстати если вынести это дело из функции прямо в код, просто условием — при 100 объектах фпс ещё держится 🙂 Но это конечно не повод забить на оптимизацию. Если можно сделать лучше — то нужно сделать лучше, я понимаю.

  74. Сергей
    11.7.2011 в 16:37

    Math.abs() быстрая функция? Ты её в циклах проверки столкновений не используешь?

  75. admin
    11.7.2011 в 17:03

    Нет, не использую вообще.

  76. Сергей
    11.7.2011 в 17:41

    Правильно ли я понимаю: в Name.x и Name.y — Name является классом, а «x» и «y» его своиствами? И при обращении к ним мы просто считываем значение переменной? (то есть не происходит дополнительных вычислений при обращении?)

  77. admin
    11.7.2011 в 17:46

    В твоём случае верно.

  78. Сергей
    11.7.2011 в 19:31

    У тебя в самой функции проверки м.б. ещё и не используются координаты для проверки столкновения?

  79. admin
    11.7.2011 в 23:33

    Они всегда используются.

  80. Сергей
    12.7.2011 в 04:00

    Ну хоть так… В общем… Покажешь свой вариант проверки? )

  81. admin
    12.7.2011 в 11:31

    Я тут ошибку нашёл в своей старой функции, так что выкладывать не буду.
    Если хочешь, то могу только теорию.

    Я тогда не заметил — но в нём есть вероятность что столкновение не будет если 1 прямоугольник в другом.

    Хотя так он в принципе работает.

  82. Сергей
    12.7.2011 в 12:23

    Да, давай теорию

  83. admin
    12.7.2011 в 12:32

    Погоди пока, я пытаюсь исправить)

  84. admin
    12.7.2011 в 13:07

    Ну вот по-моему я исправил этот баг.

    При сравнении выяснилось что как я не старался — моя функция работает медленнее чем твоя.
    Толку в ней ноль.

  85. admin
    12.7.2011 в 15:50

    Вот твоя функция немного изменённая

    function col_check(obj1:Object, obj2:Object):Boolean
    {
    	if ( ( (obj1.width+obj2.width) / 2) >= Math.abs(obj1.x-obj2.x) )
    	{
    		if (((obj1.height + obj2.height) / 2) >= Math.abs(obj1.y - obj2.y))
    		{
    			return true;
    		}
    		else return false;
    	}
    	else
    	{
    		return false;
    	}
    }
    
  86. Сергей
    12.7.2011 в 16:02

    То есть после исправления она стала медленнее, да? Прежний вариант был быстрее?

  87. Сергей
    12.7.2011 в 16:10

    Кстати я такой вариант своей функции тоже рассматривал, но потом почему-то передумал её корректировать, хотя понимаю что так она иногда быстрее будет выполняться.

    Вот какой вопрос у меня возник: при создании полноценной игры удобнее использовать несколько кадров для размещения кода, или же весь код в одном кадре? Я прикинул и уже начиная с первого шага, первое что обычно видит игрок — экран меню. Я подумал что его просто сделать в отдельном кадре, а далее, допустим первый уровень — в другом. Что ты на это скажешь? Какое лично твоё мнение?

  88. admin
    12.7.2011 в 16:24

    Здорово снова. Твоя функция работает не верно.

    Она не всегда срабатывает.

    Обращай внимания на синий квадрат в самом низу.

    Собственно как я проверял:
    Смещал квадраты по клику мыши. Рекомендую этот способ.
    Кстати он показал что мой метод никогда не ошибается.

    В кадрах код не пишут. Пока не парься по этому поводу.

  89. admin
    12.7.2011 в 16:29

    мой способ
    govnoproger.ru/wp-content/uploads/MYcol.swf
    твой
    govnoproger.ru/wp-content/uploads/YOURcol.swf

    Чтобы сдвинуть квадраты кликни мышкой.

  90. Сергей
    12.7.2011 в 18:19

    Ну-ка ну-ка… (полез в код смотреть)

    А кстати, не подскажешь как мне включить подсказки при написании функций и т.п., у меня до этого flash показывал все аргументы для внутренних функций, а теперь нет

  91. admin
    12.7.2011 в 18:47

    Я даже знаю почему не верно.

    Столкновения сделаны по окружности. Они и не будут работать.

    Насчёт подсказок хз.

  92. Сергей
    12.7.2011 в 19:15

    Логично, но у меня вроде почему-то работает: http://gamesfirst.xirad.ru/test.swf …или нет? Я не заметил отклонений по крайней мере
    …по нажатию любой клавиши на клаве…

  93. admin
    12.7.2011 в 19:20

    Короче говоря вот тут всё видно govnoproger.ru/wp-content/uploads/YOURcol.swf
    Делай больше квадратов, и размеры делай как у меня- кривые, тонкие и толстые.

    Функция не может верно работать, у прямоугольников радиусы не равны как у кругов.
    Могу предположить что этот код ты откуда-то взял.

  94. Сергей
    12.7.2011 в 19:34

    Нет, к этому коду проверки я сам пришёл. Счас ещё буду медитировать 🙂

  95. Сергей
    12.7.2011 в 19:49

    Вот очень наглядно: http://gamesfirst.xirad.ru/test_2.swf

  96. Сергей
    12.7.2011 в 19:50

    Снова по нажатию клавиши на клаве…

  97. Сергей
    12.7.2011 в 19:58

    Тьфу ты… Ну вот я собственно и понял почему я не вложил одно условие в другое 🙂
    Потому что тогда функция работает как раз и неправильно 🙂 Ты попробуй мой вариант проанализировать — результаты будут разные.

  98. Сергей
    12.7.2011 в 20:04

    Наверное… Короче я уже запутался, но у меня функция вычисляет не по радиусу… Кажется 🙂 Я честно просто уже думать не могу, голова болит

  99. admin
    12.7.2011 в 20:46

    В выложенной мной флехе как раз твой вариант, без изменений!
    Кстати код совершенно одинаков в плане алгоритма — просто добавлена точка выхода, и на проверку это повлиять не могло.

    Твоя проверка она абсолютно не логична для прямоугольников! Ты можешь словами объяснить почему ты так делал?

    Можешь на форуме flasher.ru тему создать.

    Ты бы вместо бессмысленных утверждений просто посмотрел govnoproger.ru/wp-content/uploads/YOURcol.swf
    в каких случаях не работает. Запомнил бы ширину, размеры.

  100. Сергей
    12.7.2011 в 22:07

    Я смотрел govnoproger.ru/wp-content/uploads/YOURcol.swf и у меня нет идей почему так. Я свои бессмысленные утверждения выдвигаю потому что у меня, как мне кажется, всё работает. И да, я вижу что у тебя с моей функцией не всё работает правильно и похоже что рассчёт идёт по радиусу.

    «Твоя проверка она абсолютно не логична для прямоугольников! Ты можешь словами объяснить почему ты так делал?»
    Да, могу. Я отвечаю что не взял готовую функцию, а рисовал сначала всё на бумаге чтобы вычислить условие столкновения. Рассуждал я так: для определения столкновения нам нужно чтобы прямоугольники находились на расстояниях, по осям (причём обязательно бо обеим одновременно) меньше каких-то. Меньше каких? Вычисляем: по оси X меньше чем половина ширины одного прямоугольника (так как точка координат лежит в центре прямоугольника) плюс половина ширины второго прямоугольника. Теперь это значение есть расстояние столкновения по оси X. Теперь узнаем каково текущее расстояние по оси X между прямоугольниками, этим значением будет модуль разности текущих координат прямоугольников по оси Х. Аналогично проводим вычисления и проверку по оси Y. Теперь если после первого вычисления мы выяснили что расстояние меньше или равно расстоянию столкновения — проверяем такой ли результат и у вторых вычислений, если да — столкновение есть.
    Почему нужно проверять по обеим осям? Даже если нарисовать на бумаге — ответ станет ясен: при определении столкновения по одной из осей и по второй столкновения нет, то визуально это быдет выглядеть как прямоугольники, находяшиеся приблизительно на одном уровне по оси, на которой определено пересечение и не находящиеся на одном уровне по другой оси, что не соответствует видимому столкновению и мы его собственно не видим.

  101. admin
    12.7.2011 в 23:11

    На держи координаты:
    Якобы он показывает что они сталкиваются, хотя на самом деле нет.
    Читать так
    x,width,y,height

    294.5 —- 24 —- 94.05 —- 15.9
    291.55 —- 41.9 —- 119.6 —- 39.3
    Подставим
    if ((((24+41.9)/2) >= Math.abs(294.5 — 291.55)) && (((94.05 + 119.6)/2) >= Math.abs(15.9 — 39.3)))

    32,95>=2,95 && 52,825>= Math.abs(-23)
    Удовлетвориться?
    Удовлетвориться. Столкновение будет, хотя если нарисуешь то не будет.

    Да и без рисования видно: у нас первый прямоуг, его высота 15,9 при этом его y равен 94.05
    считаем y нижней стороны 15,9+94.5
    посчитали 110,4

    а у второго прямоугольника y 119.6
    Они не могут пересекаться. Он лежит ниже первого квадрата, это невозможно.

    Вот так вот.

    вот они красные

  102. Сергей
    12.7.2011 в 23:20

    Ух ё, ну и войны идут… Счас буду разбираться в том, чем ты мне по голове ударил )

  103. admin
    12.7.2011 в 23:24

    Ты не всё предусмотрел!

  104. Сергей
    12.7.2011 в 23:59

    Хочешь верь, а хочешь — нет, но: http://gamesfirst.xirad.ru/test_4.swf
    Код этого:

    import flash.display.MovieClip;
    
    var m_clip:Array = new Array(2);
    
    m_clip[2] = new class_squares();
    m_clip[2].x = 291.55;
    m_clip[2].y = 119.6;
    m_clip[2].width = 41.9;
    m_clip[2].height = 39.3;
    m_clip[2].gotoAndStop(1);
    addChild(m_clip[2]);
    
    m_clip[1] = new class_squares();
    m_clip[1].x = 294.5;
    m_clip[1].y = 94.05;
    m_clip[1].width = 24;
    m_clip[1].height = 15.9;
    m_clip[1].gotoAndStop(2);
    addChild(m_clip[1]);
    

    По всей видимости этот же код у тебя выведет прямоугольники иначе. Я уже понял в чём дело, а ты? 🙂 Кстати я этот момент написал в своём «словесном» описании рассчёта столкновений.

    P.S. Можешь меня забанить, но я настаиваю на том, что это функция рассчёта столкновений не для круглых объектов.

  105. admin
    13.7.2011 в 00:07

    У тебя один квадрат синий

  106. Сергей
    13.7.2011 в 00:10

    Так это я специально чтоб показать что он слегка даже залазит на второй (тут нет просчёта столкновений, ВЕСЬ код этого — выше). Цвета из-за разных gotoAndStop.

  107. admin
    13.7.2011 в 00:15

    Вот сейчас я нихрена не понимаю

  108. Сергей
    13.7.2011 в 00:19

    Цитирую себя:
    «Вычисляем: по оси X меньше чем половина ширины одного прямоугольника (так как точка координат лежит в центре прямоугольника)»

    Точка координат лежит в центре прямоугольника 😉 Вот моя догадка. Проверь

  109. admin
    13.7.2011 в 00:23

    вот сейчас до меня дошло. У тебя координата сдвинута.

  110. admin
    13.7.2011 в 00:30

    Всё вот теперь я уверен что вроде-бы работает.
    И это хорошо. Не придётся использовать мой метод.
    Я думаю напишу пост про столкновения. Твой метод мне понравился он очень быстрый, но в нём сдвинута координата.

  111. admin
    13.7.2011 в 00:30

    Следующее задание — перепиши всё в классы.

    Я настаиваю чтоб ты завёл блог.
    Цена домена 90 руб в год!

  112. Сергей
    13.7.2011 в 00:58

    🙂 Эх, всё хорошо что хорошо кончается… А знаешь какой плюс всего этого? Из-за споров, чтоб доказать что моя функция рассчёта столкновений прямоугольников не является функцией рассчёта столкновений объектов круглой формы я вывел функцию столкновений круглых объектов 🙂

    Вот пример её работы: http://gamesfirst.xirad.ru/test_5.swf

    Вот код этого примера:

    import flash.display.MovieClip;
    import flash.events.Event;
    
    var m_clip:Array = new Array(2);
    
    m_clip[2] = new class_circles();
    m_clip[2].x = stage.stageWidth / 2;
    m_clip[2].y = stage.stageHeight / 2;
    m_clip[2].gotoAndStop(1);
    addChild(m_clip[2]);
    
    m_clip[1] = new class_circles();
    m_clip[1].gotoAndStop(1);
    addChild(m_clip[1]);
    
    function move_and_col_check(event:Event):void
    {
    	m_clip[1].x = mouseX;
    	m_clip[1].y = mouseY;
    	if (circles_col_check(m_clip[1], m_clip[2]))
    	{
    		m_clip[1].gotoAndStop(2);
    		m_clip[2].gotoAndStop(2);
    	}
    	else
    	{
    		m_clip[1].gotoAndStop(1);
    		m_clip[2].gotoAndStop(1);
    	}
    }
    
    addEventListener(Event.ENTER_FRAME, move_and_col_check);
    
    function circles_col_check(obj1:Object, obj2:Object):Boolean
    {
    	var dlina_1:Number = obj1.x - obj2.x;
    	var dlina_2:Number = obj1.y - obj2.y;
    	if (Math.sqrt(dlina_1 * dlina_1 + dlina_2 * dlina_2) <= (obj1.width + obj2.width) / 2)
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    

    Переменные dlina_1 и dlina_2 введены для наглядности

  113. Сергей
    13.7.2011 в 00:59

    (Круг двигать мышкой) 😉

  114. admin
    13.7.2011 в 01:03

    Ну, кружочками интернет не удивишь. В нём итак ими всё завалено.
    Поэтому я и предположил что ты его взял от туда.

    А алгоритма проверки прямоугольников либо нету, либо хрен найдёшь, либо хиттест.

  115. Сергей
    13.7.2011 в 01:09

    0_0 Ого, даже так. Я пытался найти альтернативу своему алгоритму, но не нашёл вообще ничего, хотя честно говоря не сильно старался найти… Ладно. Блин, классы говоришь… Ох ё… Придётся поломать голову немного… Но это завтра.

  116. Сергей
    13.7.2011 в 16:40

    Оу, ничего себе, счас разбираюсь как бы мне «правильнее» создать классы и понял что походу это сделает всё проще чем я предполагал. Я конечно догадываюсь что в этом и суть ооп (упрощение программирования), но всё похоже ещё круче чем я предполагал 🙂 Осталось только сделать 100 ошибок на пути к правильному созданию классов 🙂

  117. Сергей
    13.7.2011 в 18:06

    Допустим я понял как переложить в классы, но я не понял что перекладывать… Я догадываюсь что можно например тупо весь код переложить в класс (в этом кстати есть вообще смысл?) , часть кода и функцию проверки, часть кода, фукцию проверки и прямоугольники (по отдельным классам)… Ладно, допустим для начала я хочу сделать класс прямоугольников (у меня есть идея добавить некоторые свойства), но вроде этот класс же уже создан при создании объекта в библиотеке? 0_о И кстати мне уже несколько раз приходил в голову вопрос можно ли с нуля создать сам класс как он создаётся при создании мувиклипа (я ещё заметил такую штуку как класс — конструктор классов, если не ошибаюсь и пока не понял как он работает) я пока что запутался.

  118. admin
    14.7.2011 в 11:36

    Дело в том что есть определённые грабли при написании as3 в классах. Нужно чтоб ты по ним прошёлся.

    Пускай квадраты и двигаются по пробелу, теперь сделай так чтобы при клике на квадрат — выводилось что либо, ну например его координаты.

    Эта функция должна находиться в классе квадрата.

  119. Сергей
    14.7.2011 в 15:25

    Ок, спасибо за бОльшую конкретизацию задачи. Вчера как раз разобрался (думаю) как более-менее правильно создать класс для мувиклипа, чему очень рад 🙂 Теперь попробую сделать что ты сказал…

  120. Сергей
    14.7.2011 в 20:40

    Не могу найти список всех свойств класса MovieClip. Не подскажешь где искать? (ну надо 🙂 )

  121. admin
    14.7.2011 в 20:55

    help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html?filter_flex=4.1&filter_flashplayer=10.2&filter_air=2.6

  122. Сергей
    14.7.2011 в 21:56

    Оказывается не в той справке искал ) Если в функции-конструкторе прописать trace(что-нибудь) то это же должно быть выведено при создании копии класса? У меня ничего не выводится… Возможно проблема с размещением файла класса, сейчас ещё покумекаю.

  123. Сергей
    14.7.2011 в 22:32

    Нет, файл где надо лежит… Что не так… Или ничего и не должно в таком случае вывестись?

  124. admin
    14.7.2011 в 22:38

    должно

  125. Сергей
    14.7.2011 в 23:43

    Создал всё с чистого листа — теперь выводится… И подсказки снова появились 0_0 Слушай, а если я установил русскоязычную версию Flash то язык в нём только русский? Я не нашёл что-то где его сменить… До этого англ. ставил, с русским часто неудобно.

    И ещё, ты по части кодинга со своим проектом-игрой что-то делаешь? Как-то продвигаешься или всё уже готово кроме анимации/графики?

  126. Сергей
    15.7.2011 в 00:09

    Хаха, ну это ж надо, оказывается не работало из-за того что я по привычке не жал сохранить перед проверкой работы класса 🙂 В коде это делать не обязательно… Надо привыкать, как бы снова не затупить так и не возиться час с непонятной проблемой 🙂

  127. Сергей
    15.7.2011 в 00:21

    Чувствую тут надо слегка разобраться… Дело такое: я прописал в функции класса addEventListener но событие не «слушалось», затем изменил на stage.addEventListener после чего нажатия клавиш стали «ловиться». Вот мне интересно много ли таких моментов где нужно учитывать это? И ещё вопросик: запись width и this.width внутри класса подразумевают одно и то же?

  128. Сергей
    15.7.2011 в 01:01

    Сделал движение по нажатию кнопки и клика мышки прямоугольники тоже слушаются (всё в классе) и если использовать trace для вывода координат — всё хорошо, но я попробовал сделать вывод «динамическим текстом» — добавил поля на сцену, но не понял как к ним обратиться из класса… в смысле как передать им то что нужно вывести.

  129. Сергей
    15.7.2011 в 15:06

    Пля, я в расстройствах. Не разобрался до сих пор… Хотя пока пытался, услышал что такая ситуация вроде как нежелательна (когда нужно из класса к другому внешнему классу обращаться). В общем я пока что в ступоре

  130. admin
    16.7.2011 в 14:04

    Кстати у меня постоянно такой косяк))))

  131. Сергей
    16.7.2011 в 15:34

    Ого, я не одинок ))

  132. Сергей
    16.7.2011 в 15:38

    Так эт… Не подскажешь в чём может быть дело в такой ситуации: у меня в основном коде создано поле динамического текста TextField , а изменить я его пытаюсь из созданного мною класса, но вылазит ошибка что у TextField (ну в смысле у созданного мной экземпляра) нет свойства .text, почему такое происходит?

  133. Сергей
    16.7.2011 в 15:46

    Лучше напишу дословно, что-то я сомневаюсь что правильно понял ошибку, её текст: 1120: Обращение несуществующего свойства .

  134. Сергей
    16.7.2011 в 15:48

    Чёрт, тут скобки как у тегов прописал, ещё раз: 1120: Обращение несуществующего свойства «имя моего экземпляра TextField».

  135. Сергей
    16.7.2011 в 15:50

    Указано что эта ошибка в созданном мной классе.

  136. Сергей
    16.7.2011 в 15:54

    Хотя я догадываюсь что видимо класс просто не знает имени экземпляра класса TextField, так как оно задано в основном коде, а не в классе, но я пробовал прописать всё в классе — появлялась другая ошибка, но не об этом счас… Вопрос в том можно ли заставить такую «конструкцию» работать?

  137. admin
    16.7.2011 в 17:23

    Я тебе вот что скажу: ты крайне коряво выражаешься.

    Выкладывай фла cs5

  138. Сергей
    16.7.2011 в 19:26

    Может просто код покажу? Думаю сразу поймёшь о чём я.

    Файл .fla:

    import flash.display.MovieClip;
    import flash.text.TextField;
    
    var text_field:TextField = new TextField();
    
    text_field.width = 100;
    text_field.height = 20;
    text_field.border = true;
    addChild(text_field);
    

    Файл .as, из которого нужно вывести какой-то текст, в текстовое поле, созданное в .fla файле:

    package
    {
    	import flash.display.MovieClip;
    	import flash.text.TextField;
    	
    	public class temp_text extends MovieClip
    	{
    		public function temp_text():void
    		{
    			text_field.text = "Test"; // как правильно вывести информацию в текстовое поле text_field, созданное в коде .fla файла из этого класса?
    		}
    	}
    }
    
  139. Илья
    8.1.2012 в 00:05

    Хм… Что-то резко переписка остановилась, хотелось бы мне(школьнику) тоже выучить as3.

    Ладно, на всякий оставлю свой скайп: ilya112-skype

  140. Дмитрий
    17.2.2012 в 01:17

    Могу порисовать графику для игры.Если есть скетчарт игры то будет совсем замечательно.

  141. admin
    17.2.2012 в 08:40

    Сейчас не актуально пока, но если что дам знать на мыло.