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

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

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

Регистрация: Aug 2011
Сообщений: 10
По умолчанию Error #1063: Argument count mismatch

Все работает, однако выводит ошибку. Режим отладки:
ArgumentError: Error #1063: Argument count mismatch on com::Voin(). Expected 2, got 0.
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at com::Battle()[...\com\Battle.as:17]
Невозможно показать исходный код в этом месте.
Battle.as
Код AS1/AS2:
package com 
{
	import flash.display.MovieClip;
	import com.Voin;
 
	public class Battle extends MovieClip 
	{
		private var allyNumber:int = 3;
		private var enemyNumber:int = 2;
		private var ally:Voin;
		private var enemy:Voin;
		public var voins:Array = [];//массив воинов
		private var _battle:Battle;
		var i:int;
 
		public function Battle() 
		{
			stop();
			output.text = 'В бой!';
 
			_battle = this;
 
			for (i = 0; i < allyNumber; i++)//создание армии слева
			{
				ally = new Voin(_battle, 1);//создание воина, передаю ссылку на родителя и номер команды
				ally.x = 50 + 100*Math.random();
				ally.y = 150 + 150*Math.random();
				addChild(ally);
				voins.push(ally);
			}
 
			for (i = 0; i < enemyNumber; i++)//создание армии справа
			{
				enemy = new Voin(_battle, 2);//создание воина, передаю ссылку на родителя и номер команды
				enemy.rotationY = 180;//зеркально отображаю
				enemy.x = 400 + 100*Math.random();
				enemy.y = 150 + 150*Math.random();
				addChild(enemy);
				voins.push(enemy);
			}
		}
	}
}
Voin.as
Код AS1/AS2:
package com 
{
	import flash.display.MovieClip;
	import flash.events.Event;
 
	public class Voin extends MovieClip 
	{
		public var health:int = 50;
		private var damage:int = 10;
		public var own:int;
		private var _battle:Battle;
		private var enemy:Voin;
		private var finded:Boolean = false;
		private var status:String = '';
		var i:int;
		private var dodamage:Boolean = false;
 
		public function Voin(_b:Battle, _own:int) 
		{
			_battle = _b;
			own = _own;//принимаю данные
 
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
 
		private function onEnterFrame(e:Event):void 
		{
			if (health <= 0) health = 0;
 
			this.healthbar.scaleX = health / 50;
 
			if (health <= 0)// нет жизней -> смерть
			{
				for (i = 0; i < _battle.voins.length; i++)
				{
					if (this == _battle.voins[i])
					{
						_battle.output.appendText('\n' + String(own) + ':убит');
						status = '';
						stop();
						removeEventListener(Event.ENTER_FRAME, onEnterFrame);
						_battle.voins.splice(i, 1);
						_battle.removeChild(this);
						break;
					}
				}
			}else if (!finded)// если цели нет
			{
				search(); // найти ее
			} else if (lxy(enemy) > 100)//если есть, но далеко
			{
				if (status != 'going')
				{
					status = 'going';
					gotoAndPlay(1);
				}
				gotoEnemy();//идти к ней
			} else //если близко
			{
				if (status != 'fighting')
				{
					status = 'fighting';
					gotoAndPlay(11);
				}
				fight();//бей ее
			}
		}
 
		private function search():void 
		{
			var lmin:Number = 1000;
			enemy = null;
			for (i = 0; i < _battle.voins.length; i++)
			{
				var candidate:Voin = _battle.voins[i];
				if (candidate.own != own)
				{
					if (lxy(candidate) < lmin)//выбираем ближайшего врага
					{
						lmin = lxy(candidate);
						enemy = candidate;
					}
				}
			}
			if (enemy != null)
			{
				finded = true;//враг найден
			} else 
			{
				gotoAndStop(1);//враг не найден - бой окончен
				_battle.output.appendText('\n' + String(own) + ':Победа!');
			}
		}
 
		private function gotoEnemy():void 
		{
			this.x += 2 * (enemy.x - this.x) / lxy(enemy);//2*cos
			this.y += 2 * (enemy.y - this.y) / lxy(enemy);//2*sin
 
		}
 
		private function fight():void 
		{
			if(dodamage)//dodamage изменяется в 23 кадре нарисованного воина
			{
				enemy.health -= damage;
				if (enemy.health <= 0)//если враг убит 
				{
					finded = false;
					search();//найти следующего
				}
				dodamage = false;
			}
		}
 
		private function lxy(enemy:Voin):Number//найти расстояние до врага
		{
			return Math.sqrt((enemy.x - this.x) * (enemy.x - this.x) + (enemy.y - this.y) * (enemy.y - this.y));
		}
	}
}

Старый 16.06.2015, 14:27
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Запустил ваш код у себя, но подобной ошибки не выскочило. Попробуйте заново закрыть FlashIDE и открыть снова, может это глюки.

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

Регистрация: Aug 2011
Сообщений: 10
все работает, спасибо

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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