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

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

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

Регистрация: Mar 2011
Сообщений: 6
По умолчанию Проблемы с движением

Я пытался создать бильярд и все застопорилось на одной проблеме - скорость по y (обозначена yy) постоянно равна нулю. Как я не пытался перестроить код выходила одна и та же фигня.... Опытным путем я обнаружил что проблема в классе мяча, в котором я описал торможение.

Код AS1/AS2:
package cod {
	import flash.display.MovieClip;
	import flash.events.*;
	public class ball extends MovieClip {
		public var xx:Number = 0;
		public var yy:Number = 0;
		private var a:Number = 0.1;
		private var ang:Number;
 
		public function ball() {
			addEventListener(Event.ENTER_FRAME, torm);
		}
		public function torm(event:Event):void {
			ang = Math.atan2(yy,xx);
			if(xx>a ||xx<-a) {
				xx -= Math.cos(ang)*a;
			} else {
				xx = 0;
			}
			if(yy>a||yy<-a) {
				yy -= Math.sin(ang)*a;
			} else {
				yy = 0;
			}
 
 
 
	}
 
	}
 
}
Дело в том, что в процессе выполнения кода yy приравнивается к 0, после прошествия некоторого времени мяч двигается по оси Х со скоростью ХХ. По У не движеться.

Главный код

Код AS1/AS2:
package cod {
	import flash.display.*;
	import flash.events.*;
	import flash.ui.Mouse;
 
	public class first extends MovieClip {
 
		public var ball1:ball = new ball;
		public var stol1:stol = new stol;
		public var ky1:ky = new ky;
		public var kxx:Number = 0;
		public var kyy:Number = 0;
		public var mark:Number = 0;
		public var angle:Number;
		public var force:Number = 20;
		public var t:Number = 1;
		public var t1:Number;
		public var t2:Number;
 
		public var l:Number;
		public var l2:Number;
 
		public function first() {
			addChild(stol1);
			stol1.x = 0;
			stol1.y = 0;
			addChild(ball1);
			ball1.x = 300;
			ball1.y = 300;
 
			addChild(ky1);
			ky1.x = ball1.x;
			ky1.y = ball1.y;
			ky1.visible = false;
			stage.addEventListener(Event.ENTER_FRAME, kiy);
			stage.addEventListener(MouseEvent.CLICK , cli);
			stage.addEventListener(Event.ENTER_FRAME, movee);
		}
		public function movee(event:Event):void {
			if(!(ball1.xx==0)&&(ball1.yy==0)){
 
 
			t=1;
			while(t>0){
				if(ball1.xx > 0) {
					l = 770 - ball1.x - 7;
					t1 = l/ball1.xx;
				} else if(ball1.xx < 0) {
					l = ball1.x - 37;
					t1 = -l/ball1.xx;
 
				} else if(ball1.xx == 0){
					t1 = 2;
				}
 
				if(ball1.yy > 0) {
					l2 = 400 - ball1.y - 7;
					t2 = l2/ball1.yy;
				} else if(ball1.yy < 0) {
					l2 = ball1.y - 37;
					t2 = -l2/ball1.yy;
 
				} else if(ball1.yy == 0) {
					t2 = 2;
				}
 
 
				if((t1<=t2)&&(t1<= t)) {
					t-=t1;
					ball1.x += t1*ball1.xx;
					ball1.y += t1*ball1.yy;
					ball1.xx = -ball1.xx;
				} else if ((t2<=t1)&&(t2<=t)) {
					t-=t2;
					ball1.x += t2*ball1.xx;
					ball1.y += t2*ball1.yy;
					ball1.yy = -ball1.yy;
				} else {
					ball1.x += t*ball1.xx;
					ball1.y += t*ball1.yy;
					t = 0;
				}
 
 
			}
			}		
		}
		public function kiy(event:Event):void {
			if(ball1.xx == 0 && ball1.yy == 0){
				ky1.visible = true;
 
				ky1.x = ball1.x;
				ky1.y = ball1.y;
				kxx = ball1.x - stage.mouseX;
				kyy = ball1.y - stage.mouseY;
				ky1.rotation = Math.atan2(kyy,kxx)* 360/(2*Math.PI);
				mark = 1;
				angle = Math.atan2(kyy,kxx);
			} else {
				ky1.visible = false;
 
 
				mark = 0;
 
			}
		}
		public function cli(event:MouseEvent):void {
			if(mark==1) {
			ball1.xx = -force*Math.cos(angle);
			ball1.yy = -force*Math.sin(angle);
 
			}
		}			
 
	}
}
В нем я сделал обнаружение столкновений не в кадре, а за кадром, сначала просчитываются столкновения, затем уже прорабатывается движение.*

При стирании класса мяча скрипт вобще перестает работать, хотя в ммяче заложено лишь торможение..........
Подскажите как исправить ошибку, много раз было, что флеш глючил, но щас никакие меры(копироование, переименовка) непомагают =(((

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

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

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


 


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


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