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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

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

Регистрация: Aug 2012
Сообщений: 2
По умолчанию 1180: Вызов предположительно неопределенного метода

Всем привет. Недавно скачал демо видеокурса "Box2D. Basic" в 3 уроке которого возникла следующая проблема:
При добавлении импульса телу возникает ошибка "1180: Вызов предположительно неопределенного метода randomNumber."
Код:

Код AS3:
var power:Number = 8;
body.ApplyImpulse(new b2Vec2(Math.cos(randomNumber(0, Math.PI * 2)) * power,
Math.sin(randomNumber(0, Math.PI * 2)) * power),
new b2Vec2(body.GetWorldCenter().x, body.GetWorldCenter().y));
Код полностью:

Код AS3:
package  
{
	import Box2D.Collision.b2AABB;
	import Box2D.Collision.Shapes.b2CircleDef;
	import Box2D.Collision.Shapes.b2PolygonDef;
	import Box2D.Common.Math.b2Vec2;
	import Box2D.Dynamics.b2Body;
	import Box2D.Dynamics.b2BodyDef;
	import Box2D.Dynamics.b2World;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.StatusEvent;
	/**
	 * ...
	 * @author Oleg
	 */
	public class BallsGame extends GameScreen 
	{
		//::::::::::::::ПЕРЕМЕННЫЕ::::::::::::::::
 
		//Переменная мира (класс b2World)
		private var _world:b2World;
		private const RATIO: Number = 30;		
		private var _sprites:Vector.<Sprite> = new Vector.<Sprite>();
		private var _bodies:Vector.<b2Body> = new Vector.<b2Body>();	
 
		//::::::::::::::::::BallsGame::::::::::::::::::::::::::::::::::::
 
		public function BallsGame() 
		{
			//Инициализация библиотеки Box2D с помощью функции box2dInit
			box2dInit();			
			//Стены
			createWalls();			
			//Создаем шарик
			createRedCircle(randomInt(20,380),randomInt(20,430));// Функция randomInt (случайные числа)в диапазоне
 
			this.graphics.beginFill(0x00ff00, 1);
			this.graphics.drawRect(0, 0, 400, 450);
			this.graphics.endFill();
			addEventListener (MouseEvent.CLICK, onClick);
		}
 
		private function randomInt(min:Number, max:Number):int//Функция возвращает целое число
		{			
			if (min > max) throw new Error ("Oops!");
			// value (значение) представляет целое значение равное (Math*max)матем. числу * макс значение
			var value:int = Math.random() * max; 
			if (value < min) value = min + min * Math.random();
			//Функция возвращает значение value
			return value;
		}
 
		// В параметрах координаты по x и по y
		private function createRedCircle (x:Number, y:Number):void
 
		{
			var shapeDef:b2CircleDef = new b2CircleDef();// Переменная для определения фигуры (b2CircleDef - круглое тело)
			shapeDef.radius = 15 / RATIO; //Радиус
			shapeDef.density = 1; // Плотность = 1 потому что оно будет двигаться
			shapeDef.friction = 0; //Сила трения = 0
			shapeDef.restitution = 0.5;//Упругость
 
			var bodyDef:b2BodyDef = new b2BodyDef(); // Определение тела
			bodyDef.position.Set(x / RATIO, y / RATIO); //Позиция
 
			var body:b2Body = _world.CreateBody (bodyDef);
			body.CreateShape(shapeDef);
			body.SetMassFromShapes();
 
			var power:Number = 8;
			body.ApplyImpulse(new b2Vec2(Math.cos(randomNumber(0, Math.PI * 2)) * power,
			Math.sin(randomNumber(0, Math.PI * 2)) * power),
			new b2Vec2(body.GetWorldCenter().x, body.GetWorldCenter().y));
 
			var sprite: Sprite = new RedBall(); //Графическое отображения для круга
			sprite.x = x;//Координаты
			sprite.y = y;//Координаты
 
			addChild(sprite);
 
			_sprites.push(sprite);
			_bodies.push(body);
		}
 
		//СОЗДАЕМ СТЕНЫ
		private function createWalls():void
		{
			createBox(200, -5, 200, 5); // Верхняя стена
			createBox(200, 455, 200, 5);// Нижняя стена
			createBox( -5, 225, 5, 225);// Левая стена
			createBox(405,225,5,225);// Правая стена
		}
 
		private function createBox(x:Number, y:Number, w:Number, h:Number):void
		{
			var shapeDef:b2PolygonDef = new b2PolygonDef();
			shapeDef.density = 0;// Плотность (0 - не реагирует на столкновения)
			shapeDef.restitution = 1;//Упругость (1)
			shapeDef.SetAsBox(w, h);//Прямоугольник из центра
 
			var bodyDef:b2BodyDef = new b2BodyDef(); //Определение тела(чтобы указать координаты телу)
			bodyDef.position.Set(x / RATIO, y / RATIO); //position -физический вектор. метод set указывает координаты
 
			// Создаем тело.// экземпляр _world/ вызываем метод CreateBody (Создать тело) в качестве параметров определение тела
			var body:b2Body = _world.CreateBody(bodyDef); 
 
			body.CreateShape(shapeDef); //прикрепить вигуру
			body.SetMassFromShapes();// автоматически присваевается масса
 
			var sprite:Sprite = new Sprite(); // Создаем новый экземпляр Sprite
			sprite.graphics.beginFill(0x000000);
			sprite.graphics.drawRect(x - w, y - h, w * 2, h * 2);
			sprite.graphics.endFill();
 
			addChild(sprite); //Добавляем sprite в список отображения
		}
 
		// Инициализация переменной _world как новый класс мира
		private function box2dInit():void
		{
			var aabb = new b2AABB();
			aabb.lowerBound.Set ( -1000/RATIO, -1000/RATIO); //левый верхний угол
			aabb.upperBound.Set ( 1000/RATIO, 1000/RATIO); //правый нижний угол
 
			var gravity: b2Vec2 = new b2Vec2 (0, 0); // вектор по оси x и y
 
			// Границы мира\гравитация\будут ли тела засыпать
			_world = new b2World(aabb, gravity, false);
			trace(_world.GetBodyCount());//сколько тел в мире	
 
		private function onClick (e:MouseEvent):void
		{
			dispatchEvent(new StatusEvent(StatusEvent.STATUS, false, false, "", "gotoMenu"));
		}
		override public function start(): void
		{
			addEventListener (Event.ENTER_FRAME, onLive);
		}
 
		override public function stop(): void
		{
			removeEventListener (Event.ENTER_FRAME, onLive);	
		}
 
		private function onLive (e:Event):void
		{
			_world.Step (1 / 60, 10);
			for (var i:Number = 0; i < _sprites.length; i++) 
			{
				_sprites[i].x = _bodies[i].GetPosition().x*RATIO;
				_sprites[i].y = _bodies[i].GetPosition().y*RATIO;
			}
		}
	}
 
}
Зараннее спасибо.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Ну естественно, этого метода же нет в приведенном коде. Вместо него есть randomInt(). Его и нужно использовать:
Код AS3:
var power:Number = 8;
body.ApplyImpulse(new b2Vec2(Math.cos(randomInt(0, Math.PI * 2)) * power,
Math.sin(randomInt(0, Math.PI * 2)) * power),
new b2Vec2(body.GetWorldCenter().x, body.GetWorldCenter().y));

Старый 04.08.2012, 20:25
fluffy вне форума Посмотреть профиль Отправить личное сообщение для fluffy Найти все сообщения от fluffy
  № 3  
Ответить с цитированием
fluffy

Регистрация: Aug 2012
Сообщений: 2
спасибо за помощь

Старый 04.08.2012, 22:40
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 4  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Блин, да выкиньте вы этот randomInt вместе с randomNumber всё равно минимум равен нулю.
Вместо
Код AS3:
randomInt(0, Math.PI * 2)
пишите
Код AS3:
Math.random() * Math.PI * 2
__________________
adobe AS3 manual

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

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

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


 


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


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