![]() |
|
||||||||||
|
|
|
|||||
|
Создаёте новый movie с разрешением 550х400 (стандартное). Создаёте второй кадр, в actions которого пишете следующее:
clear(); gotoAndPlay("1"); В actions первого кадра пишете: // НАСТРОЙКИ speed=1; // скорость вращения вокруг оси y osi=1; // прорисовка осей (0-выкл, 1-вкл) xC = 275; // координата точки начала отсчёта (x) yC = 100; // координата точки начала отсчёта (y) // ПРОРИСОВКА ОСЕЙ if(osi==1) { noteF = new TextFormat(); noteF.color = 0x000000; noteF.bullet = false; noteF.underline = true; linestyle(0,0x999999); move3d(0, 0, 0); line3d(200, 0, 0); line3d(180, 0, -7); move3d(200, 0, 0); line3d(180, 0, 7); _root.createTextField("x", 1, coord3dx(210,0,0), coord3dy(210,0,0), 100, 100); x.border = false; x.text = "ось x"; x.setTextFormat(noteF); move3d(0, 0, 0); line3d(0, 200, 0); line3d(7, 180, 0); move3d(0, 200, 0); line3d(0, 180, 7); _root.createTextField("y", 2, coord3dx(0,210,0), coord3dy(0,210,0), 100, 100); y.border = false; y.text = "ось y"; y.setTextFormat(noteF); move3d(0, 0, 0); line3d(0, 0, 200); line3d(-7, 0, 180); move3d(0, 0, 200); line3d(7, 0, 180); _root.createTextField("z", 3, coord3dx(0,0,210), coord3dy(0,0,210), 100, 100); z.border = false; z.text = "ось z"; z.setTextFormat(noteF); } // ПРОРИСОВКА МОДЕЛИ linestyle(0); move3d(115,41,-25); curve3d(115,55,-25,115,83,-25); curve3d(83,83,-25,66,118,-25); curve3d(83,118,-25,100,118,-25); curve3d(100,135,-25,100,161,-25); curve3d(69,161,-25,49,161,-25); curve3d(18,249,-25,-48,242,-25); curve3d(-48,226,-25,-48,200,-25); curve3d(-9,203,-25,11,135,-25); curve3d(41,36,-25,115,41,-25); move3d(115,41,25); curve3d(115,55,25,115,83,25); curve3d(83,83,25,66,118,25); curve3d(83,118,25,100,118,25); curve3d(100,135,25,100,161,25); curve3d(69,161,25,49,161,25); curve3d(18,249,25,-48,242,25); curve3d(-48,226,25,-48,200,25); curve3d(-9,203,25,11,135,25); curve3d(41,36,25,115,41,25); move3d(115,41,-25); line3d(115,41,25); move3d(115,83,-25); line3d(115,83,25); move3d(66,118,-25); line3d(66,118,25); move3d(100,118,-25); line3d(100,118,25); move3d(100,161,-25); line3d(100,161,25); move3d(49,161,-25); line3d(49,161,25); move3d(-48,242,-25); line3d(-48,242,25); move3d(-48,200,-25); line3d(-48,200,25); // ФУНКЦИИ function move3d(x, y, z) { moveTo(xC-math.cos(Math.PI/180*(45+gr))*x+math.sin(Math.PI/180*(45+gr))*z, math.sin(Math.PI/180*(45+gr))*x+yC+y+math.cos(Math.PI/180*(45+gr))*z); } function line3d(x, y, z) { lineTo(xC-math.cos(Math.PI/180*(45+gr))*x+math.sin(Math.PI/180*(45+gr))*z, math.sin(Math.PI/180*(45+gr))*x+yC+y+math.cos(Math.PI/180*(45+gr))*z); } function coord3dx(x, y, z) { return xC-math.cos(Math.PI/180*(45+gr))*x+math.sin(Math.PI/180*(45+gr))*z; } function coord3dy(x, y, z) { return math.sin(Math.PI/180*(45+gr))*x+yC+y+math.cos(Math.PI/180*(45+gr))*z; } function curve3d(x,y,z,ax,ay,az) { curveTo(xC-math.cos(Math.PI/180*(45+gr))*x+math.sin(Math.PI/180*(45+gr))*z, math.sin(Math.PI/180*(45+gr))*x+yC+y+math.cos(Math.PI/180*(45+gr))*z,xC-math.cos(Math.PI/180*(45+gr))*ax+math.sin(Math.PI/180*(45+gr))*az, math.sin(Math.PI/180*(45+gr))*ax+yC+ay+math.cos(Math.PI/180*(45+gr))*az); } gr+=speed; // Copyrights ![]() _root.createTextField("copy",1,15,370,330,130); copy.multiline = true; copy.wordWrap = true; copy.border = false; copyF = new TextFormat(); copyF.color = 0x000000; copyF.bullet = false; copyF.underline = false; copyF.font = "Arial"; copyF.bold = true; copy.text = "(c) qb.studio 2002"; copy.setTextFormat(copyF); Вот собственно и всё =). Описание функций: move3d(координата по x,координата по y,координата по z) - Аналог команды moveTo, только работает относительно 3d-осей. Использование: move3d(100,50,20); line3d(координата по x,координата по y,координата по z) - Аналог команды lineTo, только работает относительно 3d-осей. Использование: line3d(100,50,20); curve3d(координата контрольной точки по x,координата контрольной точки по y,координата контрольной точки по z,координата якоря по x,координата якоря по y,координата якоря по z) - Аналог команды curveTo, только работает относительно 3d-осей. Использование: curve3d(100,50,20,20,100,60); coord3dx(координата по x,координата по y,координата по z) и coord3dy(координата по x,координата по y,координата по z) - Преображает 3D-координаты в 2D. Использование: _root.createTextField("text", 1, coord3dx(0,210,0), coord3dy(0,210,0), 100, 100); Отдельная благодарность Борщу за помощь в написании данного скрипта |
|
|||||
|
Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
|
Клево, только с перспективой траблы. И тормозит :)
|
|
|||||
|
над перспективой работаем......все будет....
но вот на счет тормозов не знаю.......на 2 комах тестили.... на 650 AMD и на CELERON 1200.....вроде без тормозов...... спасибо за оценку..............
__________________
,.;'": Borsch :"';., |
|
|||||
|
Попробуйте изменить Frame Rate...к примеру поставте 20 или 30....тогда не должно....
__________________
,.;'": Borsch :"';., |
|
|||||
|
Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
|
fps=120 так же играет, как и fps=20. У меня PIII 450 MHz
|
|
|||||
|
Блин....тогда не знаю.....
__________________
,.;'": Borsch :"';., |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
Это все оттого, что кода СЛИШКОМ много. Для рассчета вершин полноценного трехмерного объекта с перспективой требуется всего одна строка. Правда длинная.
createEmptyMovieClip("Fan", 0)._x = Stage.width / 2;
Fan._y = Stage.height / 2;
for (var i=0; i<3; i++) {
(Fan[i] = Fan.createEmptyMovieClip("B" + i, i)).data = [[0, 10, 10, Math.sqrt(200)], [25, -10, -10, Math.sqrt(725)], [100, -5, 0, Math.sqrt(10025)], [100, 5, 0, Math.sqrt(10025)]];
Fan[i].draw = function(valuea, valueb) {
// the next block is one line (you may not believe, but it is true)
for (var i=0; i<4; i++)
(i == 0? this.datax = new Array(): this.datax)[i] =
[this.R * Math.sin(this._a) * (this.Z + 200) / 200,
this.data[i][3] * Math.sin(Math.atan2(this.data[i][1], this.data[i][0]) + valueb * Math.PI / 180) * (this.Z + 200) / 200,
this.Z = (this.R = Math.sqrt((this.Z = this.data[i][2])*this.Z + (this.X = this.data[i][3] * Math.cos(Math.atan2(this.data[i][1], this.data[i][0]) + valueb * Math.PI / 180))*this.X)) * Math.cos(this._a = Math.atan2(this.X, this.Z) + valuea * Math.PI / 180)];
// end of block
this.clear();
this.lineStyle(0, 0x00, 100);
this.beginFill(0xCCCCCC, 100);
this.moveTo((this.datax[3][0] + (this.datax[4] = this.datax[0])[0])/2, (this.datax[3][1] + this.datax[0][1])/2);
for (var i=0; i<4; i++) this.curveTo(this.datax[i][0], this.datax[i][1], (this.datax[i+1][0] + this.datax[i][0])/2, (this.datax[i+1][1] + this.datax[i][1])/2);
this.endFill();
this.swapDepths(this.datax[0][2] + this.datax[1][2] + this.datax[2][2] + this.datax[3][2]);
}
}
Fan.onEnterFrame = function() {
for (var i=0; i<3; i++) this[i].draw(180 / Math.PI * Math.atan2(this._ymouse * this._ymouse + this._xmouse * this._xmouse, 40000), (i==0? (this._a += 10) - (this._rotation = 180 / Math.PI * Math.atan2(this._parent._ymouse - this._y, this._parent._xmouse - this._x)): this._a - this._rotation) + 120 * i);
}
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
Регистрация: Jul 2000
Адрес: Москва
Сообщений: 338
|
Только как бы резалт глянуть при отсутствии нужного Флеша? Может кто сердобольный свф-ку выложит. Уж больно хочется глянуть.
__________________
Анатомию курицы мы знаем лучше, чем свою... факт |
|
|||||
|
Регистрация: Nov 2002
Адрес: Спб
Сообщений: 40
|
2Bunkoff
__________________
Пока мыслю... |
|
|||||
|
Регистрация: Jul 2000
Адрес: Москва
Сообщений: 338
|
2Sasha: чегой то не то с свф-кой, не работает, панимашь. Чистое поле флеш-плеера.
__________________
Анатомию курицы мы знаем лучше, чем свою... факт |
![]() |
Часовой пояс GMT +4, время: 13:57. |
|
|
« Предыдущая тема | Следующая тема » |
|
|