Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.08.2007, 15:14
Alexsas вне форума Посмотреть профиль Отправить личное сообщение для Alexsas Посетить домашнюю страницу Alexsas Найти все сообщения от Alexsas
  № 1  
Ответить с цитированием
Alexsas

Регистрация: May 2007
Сообщений: 106
Отправить сообщение для Alexsas с помощью ICQ Отправить сообщение для Alexsas с помощью Skype™
По умолчанию Проблеммы управления главным мувиком.

Делаю маленькую игрульку..
да бы практически изучать 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.displayisplayObject.

Вопрос: почему?

Прошу реализацию игры не ругать.
Согласен подходы немного не те.. но я только учусь.


Последний раз редактировалось Alexsas; 21.08.2007 в 15:16.
Старый 21.08.2007, 16:24
Dendroid вне форума Посмотреть профиль Отправить личное сообщение для Dendroid Посетить домашнюю страницу Dendroid Найти все сообщения от Dendroid
  № 2  
Ответить с цитированием
Dendroid
 
Аватар для Dendroid

Регистрация: Dec 1999
Адрес: Магадан
Сообщений: 763
Отключи "Strict mode" (строгую проверку синтаксиса) в опциях Actionscript 3, либо поставь MovieClip(root).gotoAndStop(2); (по-умолчанию root - это DisplayObject, что тебе прямым текстом и говориться в описании ошибки).
__________________
Верить никому нельзя. Мне - можно. :)

Старый 22.08.2007, 03:14
Ноябрь вне форума Посмотреть профиль Отправить личное сообщение для Ноябрь Посетить домашнюю страницу Ноябрь Найти все сообщения от Ноябрь
  № 3  
Ответить с цитированием
Ноябрь
 
Аватар для Ноябрь

Регистрация: Jul 2005
Сообщений: 304
Отправить сообщение для Ноябрь с помощью ICQ
можно просто gotoAndStop(2);
__________________
Пора бы мне уже умнеть..

Старый 22.08.2007, 08:56
Alexsas вне форума Посмотреть профиль Отправить личное сообщение для Alexsas Посетить домашнюю страницу Alexsas Найти все сообщения от Alexsas
  № 4  
Ответить с цитированием
Alexsas

Регистрация: May 2007
Сообщений: 106
Отправить сообщение для Alexsas с помощью ICQ Отправить сообщение для Alexsas с помощью Skype™
с главным клипом разобрались..
а вот есть еще вот какая проблемка.

есть на сцене еще один мувик с 20 кадрами.. как им им управлять из класса другого мувика?.

аналогично MovieClip(root).gotoAndStop(2); - не получилось


Последний раз редактировалось Alexsas; 22.08.2007 в 08:59.
Старый 22.08.2007, 10:22
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Выясни, что такоe root.

И никогда не отключай strict.

Старый 22.08.2007, 10:34
Alexsas вне форума Посмотреть профиль Отправить личное сообщение для Alexsas Посетить домашнюю страницу Alexsas Найти все сообщения от Alexsas
  № 6  
Ответить с цитированием
Alexsas

Регистрация: May 2007
Сообщений: 106
Отправить сообщение для Alexsas с помощью ICQ Отправить сообщение для Alexsas с помощью Skype™
ну я вроде бы курсе что такое root.. может ошибаюсь..
root - это главный (корневой) мувик в котором все происходит..
strict - вернул на место.

мой мувик на сцене называется myBack
я к нему пытался обратиться вот какими способами:

1) this.myBack.gotoAndStop(2);

2) root.myBack.gotoAndStop(2);

3) root.MovieClip(myBack).gotoAndStop(2);

4) myBack.gotoAndStop(2);

Ничего из этого не сработало...
почмеу?

Старый 22.08.2007, 10:39
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
root не является тем самым root, который был в AS1/AS2, root — корневой DisplayObject дерева DisplayObject-ов, root не является ссылкой на один и тот же мувик.

Вообще, должен был сработать первый вариант, при условии написания кода в Document class и объявлением оного динамическим. И myBack должен наследоваться от MovieClip.

Старый 22.08.2007, 10:54
Alexsas вне форума Посмотреть профиль Отправить личное сообщение для Alexsas Посетить домашнюю страницу Alexsas Найти все сообщения от Alexsas
  № 8  
Ответить с цитированием
Alexsas

Регистрация: May 2007
Сообщений: 106
Отправить сообщение для Alexsas с помощью ICQ Отправить сообщение для Alexsas с помощью Skype™
нет в том-то и дело что myBack это просто мувиклип брошенный на сцену - класс ему не присвоен.. (или в As3 любому мувику теперь нужен класс??????)

Старый 22.08.2007, 11:27
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Используй getChildByName('myBack') as MovieClip.

Старый 22.08.2007, 12:34
Alexsas вне форума Посмотреть профиль Отправить личное сообщение для Alexsas Посетить домашнюю страницу Alexsas Найти все сообщения от Alexsas
  № 10  
Ответить с цитированием
Alexsas

Регистрация: May 2007
Сообщений: 106
Отправить сообщение для Alexsas с помощью ICQ Отправить сообщение для Alexsas с помощью Skype™
чего-то допереть немогу как это использовать?

попробовал вот так:
Код:
var target = this.getChildByName("myBack") as MovieClip; 
		target.gotoAndStop(5);
выдает:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:52.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.