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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.05.2013, 23:55
Nastia_22 вне форума Посмотреть профиль Отправить личное сообщение для Nastia_22 Найти все сообщения от Nastia_22
  № 1  
Ответить с цитированием
Nastia_22
[+2 12.06.13]

Регистрация: May 2013
Сообщений: 12
По умолчанию Динамическое изменение длины линии

Здравствуйте уважаемые гуру AS3

уже неделю бьюсь над вроде бы простой задачей.
Имеется пользовательский класс Nit (с параметром h), которые создает линию(нить). В этом классе есть метод, который должен увеличивать или уменьшать размер нити по оси y.

В главном классе два объекта класса Nit, и при нажатии на кнопку они должны плавно "растягиваться" или сужаться до определенного момента.

Проблема в том, что длину нити код меняет, а перерисовывать объект с новыми координатами не перерисовыет.
толку у меня не хватет.

Класс:
Код AS3:
package atv{
	import flash.geom.*;
	import flash.display.*;
	public class Nit extends Sprite{
 
			public var nit:Sprite=new Sprite();
			public var h:int;
			public var hh:int;
 
		public function Nit(h){
				nit.graphics.lineStyle(2,0x000000);
				nit.graphics.moveTo(x,y);
				nit.graphics.lineTo(x,h);
				addChild(nit);
		}
 
		public function uv(){
			hh+=15;
		}
 
		public function unUv(){
			hh-=15;
		}
 
		public function Sd(k:Boolean){
				if (k==true){
					uv();
					nit.graphics.lineTo(x,hh);
				}else{
					unUv();
					nit.graphics.lineTo(x,hh);
				}
 
		}
 
	}
}
задание и вызов: Фрагменты кода.

Код AS3:
private var nitL:Nit=new Nit(100);
private var nitP:Nit=new Nit(50);
 
public function btnClick(e:MouseEvent):void{
	timer.addEventListener(TimerEvent.TIMER,per);
	timer.start();
}
 
public function per(e:TimerEvent):void{
	УСЛОВИЕ{
		nitP.Sd(true);
		nitL.Sd(false);
 
	}else{
		timer.stop();
	}
}


Последний раз редактировалось iNils; 23.05.2013 в 02:53.
Старый 23.05.2013, 00:32
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Nastia_22, для оформления своего кода надо использовать теги [as3][/as3]
__________________
Reality.getBounds(this);

Старый 23.05.2013, 00:38
ProcXel.A вне форума Посмотреть профиль Найти все сообщения от ProcXel.A
  № 3  
Ответить с цитированием
ProcXel.A
Banned
[+1 27.05.13]

Регистрация: May 2013
Сообщений: 60
Nastia_22, непонятно, что должно происходить с твоей нитью после клика. Нить должна длину менять? Может, вот так надо?
Код AS3:
package {
	import flash.display.DisplayObjectContainer;
	import flash.display.Sprite;
 
	public class Rope extends Sprite {
 
		private var _rope_length:Number;
 
		public function Rope( container:DisplayObjectContainer, rope_length:Number, pos_x:Number = 0, pos_y:Number = 0 ) {
			container.addChild( this );
			this.x = pos_x;
			this.y = pos_y;
			_rope_length = rope_length;
			DrawRope( 0 );
		}
 
		public function DrawRope( cut:Number ):void {
			_rope_length += cut;
			this.graphics.clear();
			this.graphics.lineStyle( 2, 0x000000 );
			this.graphics.moveTo( this.x, this.y );
			this.graphics.lineTo( this.x, this.y + _rope_length );
		}
 
		public function get rope_length():Number {
			return _rope_length;
		}
 
	}
 
}
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	public class Main extends Sprite {
 
		private var rope_1:Rope;
		private var rope_2:Rope;
		private var btn:Sprite;
 
		public function Main():void {
			if ( stage )
				init();
			else
				addEventListener( Event.ADDED_TO_STAGE , init );
		}
 
		private function init( e:Event = null ):void {
			removeEventListener( Event.ADDED_TO_STAGE , init );
 
			btn = new Sprite();
			btn.graphics.beginFill( 0x000000 );
			btn.graphics.drawRect( 0, 0, 70, 20 );
			this.addChild( btn );
 
			rope_1 = new Rope( this, 200, 100, 20 );
			rope_2 = new Rope( this, 200, 200, 20 );
 
			btn.addEventListener( MouseEvent.CLICK, Click );
		}
 
		private function Click( e:MouseEvent ):void {
			btn.visible = false;
			var timer:Timer = new Timer( 25, 400 );
			timer.addEventListener( TimerEvent.TIMER, RedrawRopes );
			timer.addEventListener( TimerEvent.TIMER_COMPLETE, RedrawRopesStop );
			timer.start();
		}
 
		private function RedrawRopes( e:TimerEvent ):void {
			var timer:Timer = e.target as Timer;
			rope_1.DrawRope( Math.sin( timer.currentCount / 50 ) );
			rope_2.DrawRope( Math.cos( timer.currentCount / 50 ) );
			trace( "длина первой нити: ", rope_1.rope_length, " | длина второй нити: ", rope_2.rope_length );
		}
 
		private function RedrawRopesStop( e:TimerEvent ):void {
			e.target.removeEventListener( TimerEvent.TIMER, RedrawRopes );
			e.target.removeEventListener( TimerEvent.TIMER_COMPLETE, RedrawRopesStop );
			btn.visible = true;
		}
 
	}
 
}

Старый 23.05.2013, 00:47
Nastia_22 вне форума Посмотреть профиль Отправить личное сообщение для Nastia_22 Найти все сообщения от Nastia_22
  № 4  
Ответить с цитированием
Nastia_22
[+2 12.06.13]

Регистрация: May 2013
Сообщений: 12
да нить должна длину менять, щас посмотрим, спасибо

Добавлено через 28 минут
мне нужно чтобы при одном нажатии на кнопку таймером менялось значение до определенного момента, а потом останавливалось.

а здесь пока что при одном щелчке прибавление одного значения к длине, а мне надо чтобы в цикле как бы это было

Добавлено через 1 час 31 минуту
Спасибо! длина изменяется, а вот чтобы при нажатии кнопки вернуть в исходное состояние - тоже не получается.

Старый 28.05.2013, 02:00
ProcXel.A вне форума Посмотреть профиль Найти все сообщения от ProcXel.A
  № 5  
Ответить с цитированием
ProcXel.A
Banned
[+1 27.05.13]

Регистрация: May 2013
Сообщений: 60
Ну, подумай логически. Есть веревка. У нее есть свойство rope_length, которое возвращает длину. И есть метод, который отрезает кусок. Значит, чтобы установить длину веревки, например, в 100, нужно написать
Код AS3:
DrawRope( 100 - rope.rope_length );
Либо допиши класс, чтобы он умел восстанавливать длину.

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

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

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


 


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


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