![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Делаю маленькую игрульку..
да бы практически изучать AS3/ Столкнулся с проблемой немогу управлять главным мувиком. package main{
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.*;
import flash.net.URLRequest;
import flash.utils.Timer;
import flash.events.TimerEvent;
dynamic public class Body extends MovieClip {;
private var _container:Sprite;
//private var adr:String="";
private var adr:String="C:/AS3_COdding/05_my/Game/";
private var localAdr:String="/item/";
private var TimerCount:Number=400;
private var Kucha:Number=2;
var StageWidth:Number=700;
var StageHeight:Number=550;
var xTarget:Number=0;
var yTarget:Number=0;
var box:Boolean = false;
public function Body() {
super();
this._container=new Sprite ;
this.addChild(this._container);
TimerEventExample();
}
// скорость добавления новой
public function TimerEventExample() {
var myTimer:Timer=new Timer(TimerCount,500);
myTimer.addEventListener(TimerEvent.TIMER,timerHandler);
myTimer.start();
}
// срабатывание таймера
public function timerHandler(event:TimerEvent):void {
//trace(TimerCount);
//trace(Kucha);
SelectItem();
Kucha=2;
StageWidth=700;
StageHeight=550;
xTarget=0;
yTarget=0;
box=false;
}
// случайный выбор номера элемента
private function SelectItem():void {
for (var ii:uint=1; ii < Kucha; ii++) {
var i:Number = Math.round(Math.random() * 28) + 1;
AddItemTo(i);
}
}
// функция добавления объекта на экран
public function AddItemTo(i):void {
var item0:Loader=new Loader;
if (i < 10) {
localAdr="/item/0";
} else {
localAdr="/item/";
}
var url:String=adr + localAdr + i + ".png";
var urlReq:URLRequest=new URLRequest(url);
var xx:Number=Math.random() * StageWidth;
var yy:Number=Math.random() * StageHeight;
item0.load(urlReq);
item0.x=xTarget + Math.round(xx);
item0.y=yTarget + Math.round(yy);
this._container.addChild(item0);
this._container.addEventListener(MouseEvent.CLICK,this.clickHandler);
trace(this._container.numChildren);// количество детей
if (this._container.numChildren > 99) {
this.removeChild(this._container);
}
}
// функция удаления выбранного объекта
public function clickHandler(event:MouseEvent):void {
var index:Number=this._container.getChildIndex(event.target as DisplayObject);
var ldr:Loader=this._container.getChildAt(index) as Loader;
var nameItem:String=ldr.contentLoaderInfo.url;
var nameItemSel=nameItem.slice(-6,nameItem.length - 4);
// много ящиков
if (nameItemSel == "28") {
Kucha=10;
xTarget=this._container.getChildAt(index).x - 50;
yTarget=this._container.getChildAt(index).y - 50;
StageWidth=100;
StageHeight=100;
box = true;
}
// еще больше ящиков
if (nameItemSel == "29") {
Kucha=20;
xTarget=this._container.getChildAt(index).x - 50;
yTarget=this._container.getChildAt(index).y - 50;
StageWidth=100;
StageHeight=100;
box = true;
}
// остановка времени
if (nameItemSel == "25") {
TimerCount = 10000;
TimerEventExample();
}
// Game Over
if (nameItemSel == "07") {
this.removeChild(this._container);
root.gotoAndStop(2);
}
// смена цвета
if (nameItemSel == "24") {
//BackColor(Math.round(Math.random() * 19) + 1);
BackColor();
}
this._container.removeChild(event.target as DisplayObject);
TimerCount=TimerCount - 10;
}
// смена цвета
public function BackColor():void {
var square:Shape=new Shape;
square.graphics.beginFill(0x000000,1);
square.graphics.drawRect(0,0,800,600);
square.graphics.endFill();
this.addChild(square);
this.swapChildren(_container, square);
}
}
}
if (nameItemSel == "07") { this.removeChild(this._container); root.gotoAndStop(2); 1061: Call to a possibly undefined method gotoAndStop through a reference with static type flash.display isplayObject.Вопрос: почему? Прошу реализацию игры не ругать. Согласен подходы немного не те.. но я только учусь.
__________________
Встретимся на пляже! Последний раз редактировалось Alexsas; 21.08.2007 в 15:16. |
|
|||||
|
Регистрация: Dec 1999
Адрес: Магадан
Сообщений: 763
|
Отключи "Strict mode" (строгую проверку синтаксиса) в опциях Actionscript 3, либо поставь MovieClip(root).gotoAndStop(2); (по-умолчанию root - это DisplayObject, что тебе прямым текстом и говориться в описании ошибки).
__________________
Верить никому нельзя. Мне - можно. :) |
|
|||||
|
можно просто gotoAndStop(2);
__________________
Пора бы мне уже умнеть.. |
|
|||||
|
с главным клипом разобрались..
а вот есть еще вот какая проблемка. есть на сцене еще один мувик с 20 кадрами.. как им им управлять из класса другого мувика?. аналогично MovieClip(root).gotoAndStop(2); - не получилось ![]()
__________________
Встретимся на пляже! Последний раз редактировалось Alexsas; 22.08.2007 в 08:59. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Выясни, что такоe root.
И никогда не отключай strict. |
|
|||||
|
ну я вроде бы курсе что такое root.. может ошибаюсь..
root - это главный (корневой) мувик в котором все происходит.. strict - вернул на место. мой мувик на сцене называется myBack я к нему пытался обратиться вот какими способами: 1) this.myBack.gotoAndStop(2); 2) root.myBack.gotoAndStop(2); 3) root.MovieClip(myBack).gotoAndStop(2); 4) myBack.gotoAndStop(2); Ничего из этого не сработало... почмеу?
__________________
Встретимся на пляже! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
root не является тем самым root, который был в AS1/AS2, root — корневой DisplayObject дерева DisplayObject-ов, root не является ссылкой на один и тот же мувик.
Вообще, должен был сработать первый вариант, при условии написания кода в Document class и объявлением оного динамическим. И myBack должен наследоваться от MovieClip. |
|
|||||
|
нет в том-то и дело что myBack это просто мувиклип брошенный на сцену - класс ему не присвоен.. (или в As3 любому мувику теперь нужен класс??????)
__________________
Встретимся на пляже! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Используй getChildByName('myBack') as MovieClip.
|
|
|||||
|
чего-то допереть немогу как это использовать?
попробовал вот так: выдает: TypeError: Error #1009: Cannot access a property or method of a null object reference. at main::Body/::BackColor() at main::Body/clickHandler()
__________________
Встретимся на пляже! Последний раз редактировалось Alexsas; 22.08.2007 в 12:44. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:52. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|