![]() |
|
||||||||||
|
|||||
|
Здравствуйте! Помогите разобраться с скриптом, вернее можно исправить скрипт чтобы границы анимации были привязаны к разрешению монитора, сейчас границы 1024*768?
скрипт: Stage.scaleMode = "noScale"; ////////////////////////////////////////////////////// MovieClip.prototype.addBlob = function(bname, bdepth, xy) { var blob = this.createEmptyMovieClip(bname, bdepth); blob.len = xy.length; blob.ma = 1; var k = 0.80,w=1024,h=768; for (var i = 0; i<blob.len; i++) blob[i] = {x:xy[i][0], y:xy[i][1], ix:xy[i][0], iy:xy[i][1]}; blob.onEnterFrame = function() { with (this) { with (_parent) { if (_x+r>w) {_x = w-r; vx*= -1;b.wobble(r/6);} if (_x<r) {_x = r; vx*= -1;b.wobble(r/6);} if (_y+r>h){_y = h-r; vy*= -1;b.wobble(r/6);} if (_y<r) {_y = r;vy*= -1;b.wobble(r/6);} _x += vx; _y += vy; } if (!ma) return; ma--; for (var i = 0; i<len; i++) { this[i].vx += (this[i].ix-this[i].x)/8; this[i].vy += (this[i].iy-this[i].y)/8; this[i].x += this[i].vx *= k; this[i].y += this[i].vy *= k; } clear(); beginFill(0); moveTo((this[0].x+this[len-1].x)/2, (this[0].y+this[len-1].y)/2); for (var i = 0; i<len; i++) { var nxt = (i == len-1) ? this[0] : this[i+1]; curveTo(this[i].x, this[i].y, (this[i].x+nxt.x)/2, (this[i].y+nxt.y)/2); } endFill(); } }; return blob; }; /////////возмущение///////////////////////////////////////////// MovieClip.prototype.wobble = function(mag) { this.ma = 30; for (var i = 0; i<this.len; i++) { this[i].vx += (Math.random()-0.5)*mag; this[i].vy += (Math.random()-0.5)*mag; this[i].x += (Math.random()-0.5)*4; this[i].y += (Math.random()-0.5)*4; } }; //////////столкновение///////////////////////////////////////////////// MovieClip.prototype.kick = function(ball) { var fi = Math.atan2(ball._y-this._y, ball._x-this._x); var adir = Math.atan2(this.vy, this.vx); var bdir = Math.atan2(ball.vy, ball.vx); var av = Math.sqrt(this.vx*this.vx+this.vy*this.vy); var bv = Math.sqrt(ball.vx*ball.vx+ball.vy*ball.vy); var vn = av*Math.sin(adir-fi+Math.PI/2)-bv*Math.sin(bdir-fi+Math.PI/2); var dv1 = -2*ball.m/(this.m+ball.m)*vn; var dv2 = 2*this.m/(this.m+ball.m)*vn; this.vx += dv1*Math.cos(fi); this.vy += dv1*Math.sin(fi); ball.vx += dv2*Math.cos(fi); ball.vy += dv2*Math.sin(fi); this.b.wobble(this.r/4); ball.b.wobble(ball.r/4); }; /////////////////////////////////////////////////////////// getCircle = function (r) { var a = [], fi = Math.PI/3; for (var i = 0; i<6; i++) {a.push([r*Math.sin(i*fi), r*Math.cos(i*fi)]);} return a; }; // ////////////////////////////////////////////////////////// nballs = 6; for (i=0; i<nballs; i++) { var ball = this.createEmptyMovieClip(i, i); var bg=ball.attachMovie("bg", "bg", 0, {_xscale:100+12*i, _yscale:100+12*i}); ball.bg.rb.gotoAndPlay(i*50+1); ball.bg.rb.onEnterFrame = function() { this._rotation += random(3) }; ball.addBlob("b", 1, getCircle(30+10*i)); ball.bg.setMask(ball.b); ball.x = ball._x=random(1024); ball.y = ball._y=random(768); ball.m = ball.r=24+10*i; ball.vx = 4-random(9); ball.vy = 4-random(9); ball.onPress = function() { this.b.wobble(this.r/2)}; } // ///////////////////////////////////////////////////// this.onEnterFrame = function() { for (var i = 0; i<nballs; i++) { for (var j = i+1; j<nballs; j++) { var dx = this[i]._x+this[i].vx-this[j]._x-this[j].vx; var dy = this[i]._y+this[i].vy-this[j]._y-this[j].vy; var cx = this[i]._x-this[j]._x; var cy = this[i]._y-this[j]._y; var dr = Math.sqrt(dx*dx+dy*dy); var cr = Math.sqrt(cx*cx+cy*cy); if (dr<=this[i].r+this[j].r && dr<cr) this[i].kick(this[j]); } } }; |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Название темы не отражает сути вопроса.
Код не оформлен тегами [as][/as]. |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|