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

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

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

Регистрация: Dec 2006
Сообщений: 230
По умолчанию Как создать кодом скругленный прямоугольнег?

Как создать кодом скругленный прямоугольнег? Заодно и с градиентной заливкой. Юзаю сейчас какой-то левый класс.

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

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
вам потребуются следующие заклинания:
Цитата:
Сообщение от F1
lineStyle()
beginGradientFill()
moveTo()
lineTo()
curveTo()
lineTo()
curveTo()
endFill()


Последний раз редактировалось Kikasso; 31.08.2007 в 04:58.
Старый 31.08.2007, 06:17
Ariel вне форума Посмотреть профиль Отправить личное сообщение для Ariel Найти все сообщения от Ariel
  № 3  
Ответить с цитированием
Ariel
 
Аватар для Ariel

Регистрация: Dec 2006
Сообщений: 230
эхзампель эсть?

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

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
вот, as2 класс
правда я на скорую руку удалил лишнее... после приличного количества мартини экстра драй :~) надеюсь не в ущерб работоспособности класса...
экземпляры прямоугольников нужно создавать при помощи функции createRect, надеюсь вы разберётесь :~)

Код:
class zh.Rect extends MovieClip{
	private var _w:Number;
	private var _h:Number;
	private var _color;
	private var _borderColor:Number;
	private var _r:Array;
	private var _border:Number;

	public function set w (val:Number):Void{_w=val; draw();}
	public function get w ():Number{return(_w);}	
	public function set h (val:Number):Void{_h=val; draw();}
	public function get h ():Number{return(_h);}	
	public function set color(val):Void{_color=val; draw();}


	public static function createRect(
		parent:MovieClip, name:String, depth:Number, 
		w:Number, h:Number, r, color, border:Number, borderColor:Number
	):MovieClip{
		var params = [w, h, r, color, border, borderColor];
		var mc:MovieClip = parent.createEmptyMovieClip(name, depth);
		mc.__proto__ = Rect.prototype;
		mc.constructor = Rect;
		mc.constructor.apply(mc, params);
		return(mc);
	}
	
	function Rect(wVal:Number, hVal:Number, rVal, colorVal, borderVal:Number, borderColorVal:Number){	
		if(wVal){_w=wVal}else{_w=100;}
		if(hVal){_h=hVal}else{_h=30;}
		if(typeof(rVal)=='object'){_r=rVal;}else if(typeof(rVal)=='number'){_r=[rVal,rVal,rVal,rVal];}else{_r=[0,0,0,0];}
		if(colorVal){_color=colorVal}else{_color=0xCC3300;}
		if(borderVal){_border=borderVal}else{_border=0;}
		if(borderColorVal){_borderColor=borderColorVal}else{_borderColor=0x333333;}
		
		draw();
	}	
	
	public function move(x,y):Rect{
		_x=x;
		_y=y;
		return(this);
	}
	
	private function draw():Void{
		clear();
		
		if(_border==0){
			drawNoborderRect(0, 0, _w, _h, _r, _color);
		}else{
			drawNoborderRect(0, 0, _w, _h, _r, _borderColor);
			
			var border:Number=_border;
			if(border>Math.min(_w, _h)/2-.5){border=Math.min(_w, _h)/2-.5;}
			var rr:Array=[];
			for (var i:Number = 0; i<4; i++){
				rr[i]=_r[i]-border;
				if(rr[i]<0){rr[i]=0;}
			}
			drawNoborderRect(border, border, _w-2*border, _h-2*border, rr, _color);
		}
	}
	
	private function drawNoborderRect(x:Number, y:Number, w:Number, h:Number, r:Array, c:Number):Void{
		var theta:Number, angle:Number, cx:Number, cy:Number, px:Number, py:Number;
		
	
		beginFill(c);
		
		// theta = 45 degrees in radians
		theta = Math.PI/4;
		
		// draw top line
		moveTo(x+r[0], y);				
		lineTo(x+w-r[1], y);
		
		//angle is currently 90 degrees
		angle = -Math.PI/2;
		
		// draw tr corner in two parts
		cx = x+w-r[1]+(Math.cos(angle+(theta/2))*r[1]/Math.cos(theta/2));
		cy = y+r[1]+(Math.sin(angle+(theta/2))*r[1]/Math.cos(theta/2));
		px = x+w-r[1]+(Math.cos(angle+theta)*r[1]);
		py = y+r[1]+(Math.sin(angle+theta)*r[1]);
		curveTo(cx, cy, px, py);		
		angle += theta;
		cx = x+w-r[1]+(Math.cos(angle+(theta/2))*r[1]/Math.cos(theta/2));
		cy = y+r[1]+(Math.sin(angle+(theta/2))*r[1]/Math.cos(theta/2));
		px = x+w-r[1]+(Math.cos(angle+theta)*r[1]);
		py = y+r[1]+(Math.sin(angle+theta)*r[1]);
		curveTo(cx, cy, px, py);
		
		// draw right line
		lineTo(x+w, y+h-r[2]);
		
		// draw br corner
		angle += theta;
		cx = x+w-r[2]+(Math.cos(angle+(theta/2))*r[2]/Math.cos(theta/2));
		cy = y+h-r[2]+(Math.sin(angle+(theta/2))*r[2]/Math.cos(theta/2));
		px = x+w-r[2]+(Math.cos(angle+theta)*r[2]);
		py = y+h-r[2]+(Math.sin(angle+theta)*r[2]);
		curveTo(cx, cy, px, py);
		angle += theta;
		cx = x+w-r[2]+(Math.cos(angle+(theta/2))*r[2]/Math.cos(theta/2));
		cy = y+h-r[2]+(Math.sin(angle+(theta/2))*r[2]/Math.cos(theta/2));
		px = x+w-r[2]+(Math.cos(angle+theta)*r[2]);
		py = y+h-r[2]+(Math.sin(angle+theta)*r[2]);
		curveTo(cx, cy, px, py);
		
		// draw bottom line
		lineTo(y+r[3], x+h);
		
		// draw bl corner
		angle += theta;
		cx = x+r[3]+(Math.cos(angle+(theta/2))*r[3]/Math.cos(theta/2));
		cy = y+h-r[3]+(Math.sin(angle+(theta/2))*r[3]/Math.cos(theta/2));
		px = x+r[3]+(Math.cos(angle+theta)*r[3]);
		py = y+h-r[3]+(Math.sin(angle+theta)*r[3]);
		curveTo(cx, cy, px, py);
		angle += theta;
		cx = x+r[3]+(Math.cos(angle+(theta/2))*r[3]/Math.cos(theta/2));
		cy = y+h-r[3]+(Math.sin(angle+(theta/2))*r[3]/Math.cos(theta/2));
		px = y+r[3]+(Math.cos(angle+theta)*r[3]);
		py = y+h-r[3]+(Math.sin(angle+theta)*r[3]);
		curveTo(cx, cy, px, py);
		
		// draw left line
		lineTo(x, y+r[0]);
		
		// draw tl corner
		angle += theta;
		cx = x+r[0]+(Math.cos(angle+(theta/2))*r[0]/Math.cos(theta/2));
		cy = y+r[0]+(Math.sin(angle+(theta/2))*r[0]/Math.cos(theta/2));
		px = x+r[0]+(Math.cos(angle+theta)*r[0]);
		py = y+r[0]+(Math.sin(angle+theta)*r[0]);
		curveTo(cx, cy, px, py);
		angle += theta;
		cx = x+r[0]+(Math.cos(angle+(theta/2))*r[0]/Math.cos(theta/2));
		cy = y+r[0]+(Math.sin(angle+(theta/2))*r[0]/Math.cos(theta/2));
		px = x+r[0]+(Math.cos(angle+theta)*r[0]);
		py = y+r[0]+(Math.sin(angle+theta)*r[0]);
		curveTo(cx, cy, px, py);
		
		endFill();
	}	
}

p.s.
я улетел в Швейцарию, чао :~)

p.p.s.
терпеть не могу тех кто пишет з.з.ы.
__________________
Хороший отдых - половина работы.

Старый 31.08.2007, 09:24
Ariel вне форума Посмотреть профиль Отправить личное сообщение для Ariel Найти все сообщения от Ariel
  № 5  
Ответить с цитированием
Ariel
 
Аватар для Ariel

Регистрация: Dec 2006
Сообщений: 230
Вот спасибочки!! Реально удружили! Потащил разбираться!! Йес! Удачи в Швейцарии!

Хотя вообще странно, что к 8-ой версии Макромедия до сих пор не предоставила стандарного класса в коллекции draw для рисования скругленных прямоугольнегов.


Последний раз редактировалось etc; 31.08.2007 в 09:47.
Создать новую тему Ответ Часовой пояс GMT +4, время: 09:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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