![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Извиняюсь, что спрашиваю, наверное, глупый вопрос, но экшн скрипт я начал изучать недавно и он поставил меня в тупик.
Имеется мувик на одном из кадров главной таймлайн (GamePlay), в котором создается массив объектов дочерних от класса Star (в классе прописано движение звезд). Подклассы этого класса прикреплены к разным мувикам с изображением звезд разной формы и цвета. В общем вот код: package main { import flash.display.*; import stars.*; public class GamePlay extends MovieClip { public function GamePlay() { stage.focus = this; this.focusRect = false; addStars (); } public function addStars ():void { var arrayOfStar15Big: Array = new Array (); for (var i:int = 0; i < 5; i++) { arrayOfStar15Big.push(new Star15Big ()); arrayOfStar15Big[i].x = Math.floor(Math.random() * 900); arrayOfStar15Big[i].y = Math.floor(Math.random() * 660); addChild(arrayOfStar15Big [i]); } var arrayOfStar6Red: Array = new Array (); for (var j:int = 0; j < 7; j++) { arrayOfStar6Red.push(new Star6Red ()); arrayOfStar6Red[i].x = Math.floor(Math.random() * 900); arrayOfStar6Red[i].y = Math.floor(Math.random() * 660); addChild(arrayOfStar6Red [i]); } } } } И еще - такой же код у меня прекрасно работал в другом fla файле, а тут возникли проблемы. Можно ли это как то исправить, а то расставлять звезды вручную по ряду причин не вариант. Последний раз редактировалось dimarik; 07.09.2011 в 00:50. |
|
|||||
|
[+1 16.08.10]
Регистрация: Jun 2009
Сообщений: 93
|
По моему ошибка в циклах
попробуй так var arrayOfStar15Big: Array = new Array (); for (var i:int = 0; i < 5; i++) { var star15Big:Star15Big=new Star15Big (); star15Big.x = Math.floor(Math.random() * 900); star15Big.y = Math.floor(Math.random() * 660); addChild(star15Big); arrayOfStar15Big.push(star15Big) } var arrayOfStar6Red: Array = new Array (); for (var j:int = 0; j < 7; j++) { var star6Red:Star6Red=new Star6Red (); star6Red.x = Math.floor(Math.random() * 900); star6Red.y = Math.floor(Math.random() * 660); addChild(star6Red); arrayOfStar6Red.push(new Star6Red ()); } |
|
|||||
|
пришлось моделировать у себя текущую ситуацию....
оказалось банальная ошибка, вы во втором цикле перепутали операторы j != i рабочий код: package main { import flash.display.*; import stars.*; public class GamePlay extends MovieClip { public function GamePlay() { stage.focus = this; this.focusRect = false; addStars (); } public function addStars ():void { var arrayOfStar15Big: Array = new Array (); for (var i:int = 0; i < 5; i++) { arrayOfStar15Big.push(new Star15Big()); arrayOfStar15Big[i].x = Math.floor(Math.random() * 900); arrayOfStar15Big[i].y = Math.floor(Math.random() * 660); addChild(arrayOfStar15Big[i]); } var arrayOfStar6Red: Array = new Array (); for (var j:int = 0; j < 7; j++) { arrayOfStar6Red.push(new Star6Red()); arrayOfStar6Red[j].x = Math.floor(Math.random() * 900); arrayOfStar6Red[j].y = Math.floor(Math.random() * 660); addChild(arrayOfStar6Red[j]); } } } } |
|
|||||
|
veisss большое спасибо за помощь, но код у вас не правильный, и без массива объектов тут никак не обойдешся
Добавлено через 4 минуты Newred тоже большое спасибо за помощь, но дело не в этом. Код по идее работал хотя бы с первым массивом |
|
|||||
|
Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Newred скопировал ваши исходники к себе в проект, тем более что пакеты и все названия совпадают. Результат такой же как и в первом посте, собственно я уже говорил что этот код работает в другом fla-файле. Тут наверное проблема в чем то другом, буду думать, спасибо в любом случае.
Добавлено через 34 минуты Кажется стал догадоваться в чем проблема, проблема все таки в коде класа Star, осталось придумать как это исправить. вот код класса: package stars
{
import flash.display.*;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Star extends MovieClip
{
public static var correctionVelosity = 1; // придумать как синхронизировать движение и сделать разные скорости
public var velosity:Number;
public function Star()
{
velosity = 1;
this.stage.addEventListener (KeyboardEvent.KEY_DOWN, moveStar); //проблема где то здесь.
addEventListener (Event.ENTER_FRAME, move);
}
public function move (e:Event):void
{
this.x -= velosity; // возможно отсюда надо вычитать константу и затем проверять что бы она не была < 0
if (this.x < 0)
{
this.x = parent.width + 10;
}
}
public function moveStar (e:KeyboardEvent):void
{
if (e.keyCode == Keyboard.SPACE)
{
acceleration ();
}
if (e.keyCode == Keyboard.SHIFT)
{
deceleration ();
}
}
public function acceleration ():void
{
velosity++;
if (velosity > 30)
{
velosity = 30;
}
}
public function deceleration ():void
{
velosity--;
if (velosity < 1)
{
velosity = 1;
}
}
}
}
Добавлено через 38 минут То есть код слушателя клавиатуры срабатывает раньше чем объект добавляется на сцену, так помоему, и по этому он дает null в ран-тайме Добавлено через 38 минут Вопрос как это исправить |
|
|||||
|
Сделал вот так:
package stars
{
import flash.display.*;
import flash.events.*;
import flash.ui.Keyboard;
public class Star extends MovieClip
{
public static var correctionVelosity = 1; // придумать как синхронизировать движение и сделать разные скорости
public var velosity:Number;
public function Star()
{
velosity = 1;
addEventListener (Event.ADDED_TO_STAGE, addListener);
addEventListener (Event.ENTER_FRAME, move);
}
public function addListener (e:Event):void
{
if (this.stage != null)
{
stage.addEventListener (KeyboardEvent.KEY_DOWN, moveStar);
}
}
public function move (e:Event):void
{
this.x -= velosity; // возможно отсюда надо вычитать константу и затем проверять что бы она не была < 0
if (this.x < 0)
{
this.x = parent.width + 10;
}
}
public function moveStar (e:KeyboardEvent):void
{
if (e.keyCode == Keyboard.SPACE)
{
acceleration ();
}
if (e.keyCode == Keyboard.SHIFT)
{
deceleration ();
}
}
public function acceleration ():void
{
velosity++;
if (velosity > 30)
{
velosity = 30;
}
}
public function deceleration ():void
{
velosity--;
if (velosity < 1)
{
velosity = 1;
}
}
}
}
at stars::Star/move() Последний раз редактировалось PainKiller; 07.09.2011 в 23:51. |
|
|||||
|
[+1 16.08.10]
Регистрация: Jun 2009
Сообщений: 93
|
У меня у самого там опечатка во втором цикле
Так правильнее var arrayOfStar6Red: Array = new Array (); for (var j:int = 0; j < 7; j++) { var star6Red:Star6Red=new Star6Red (); star6Red.x = Math.floor(Math.random() * 900); star6Red.y = Math.floor(Math.random() * 660); addChild(star6Red); arrayOfStar6Red.push(star6Red); } А Error #1009: тебе выдает эта строчка Это перенеси в И всегда когда пользуешься опасными переменными(parent,stage...) лучше проверяй их |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:54. |
|
|
« Предыдущая тема | Следующая тема » |
|
|