User Tools

Site Tools


script_llxperiment_boing_no_overlap

**This is an old revision of the document!** ----

A PCRE internal error occured. This might be caused by a faulty plugin

====== About the script ====== * Purpose : This script will bounce all items randomly around,they will bounce off the screen borders and each other. * Author : [[https://plus.google.com/+LukasMorawietz|LM13]] * Concept : This script is based on the [[script_llxperiment_boing|boing script]] by TrianguloY * Current Version : 1.0 * Link : ... ====== Changelog ====== * Version 1.0 (3/5/2014): initial release in wiki ====== How to use the script ====== * detach all items in a container * set up configuration * run the script in the container ====== Issues and hints ====== * unexpected effects may occur if the items overlap when you start the script * sometimes an item jumps. This happens because the item has no space where it should move to. * If you have set velocity to 1 or bigger, you can cancel the script by opening any app * You'll need a high end phone to run this smoothly with a lot of items. It should work on average phones for up to 5 items. //please report all bugs in the g+ community// ====== Script code ====== <code>var bounciness = 0.95;//Reduction every tick, between 0 (only one tick) and 1 (always bouncing) [Recommended 0.95] var inVel = 0.5 //initial velocity. set it to 0 for random one [recommended 0.5] var frecuency = 60;//ticks per second [Recommended 60] var event = LL.getEvent(); var cont = event.getContainer(); var items=cont.getItems(); for(var i=items.getLength()-1; i>=0;--i){ var item=items.getAt(i); if(item.getType()=="StopPoint")continue; var ang = Math.random()*2*Math.PI; var invel=inVel; if(invel<=0)invel=Math.random(); invel*=(cont.getHeight()+cont.getWidth())/2; var data=new Object(); data.vel = [ Math.cos(ang)*invel , Math.sin(ang)*invel ]; data.size = [ item.getWidth()*item.getScaleX() , item.getHeight()*item.getScaleY() ]; item.setTag(JSON.stringify(data)); } tick(); function tick(){ var changed=false; for(var a=items.getLength()-1; a>=0;--a){ var i=items.getAt(a); if(i.getType()=="StopPoint")continue; var data=JSON.parse(i.getTag()); //exit statement if((Math.abs(data.vel[0])<0.2 && Math.abs( data.vel[1])<0.2)||LL.isPaused()) continue; var changed=true; //Reduction data.vel=[ data.vel[0]*bounciness , data.vel[1]*bounciness ]; var newpos = [ i.getPositionX()+ data.vel[0] , i.getPositionY()+ data.vel[1] ]; for(var b=a-1; b>=0;--b){ var i2=items.getAt(b); if(i2.getType()=="StopPoint")continue; var data2=JSON.parse(i2.getTag()); var newpos2 = [ i2.getPositionX()+ data2.vel[0] , i2.getPositionY()+ data2.vel[1] ]; var p; var p2; var s; var s2; if(data.size[0]<data2.size[0]) { p=newpos[0] p2=newpos2[0]; s=data.size[0]; s2= data2.size[0]; } else { p=newpos2[0] p2=newpos[0]; s=data2.size[0]; s2= data.size[0]; } var overx= ((p2<p&&p<p2+s2)||(p2<p+s&&p+s<p2+s2)); if(data.size[1]<data2.size[1]) { p=newpos[1]; p2=newpos2[1]; s=data.size[1]; s2= data2.size[1]; } else { p=newpos2[1]; p2=newpos[1]; s=data2.size[1]; s2= data.size[1]; } var overy= ((p2<p&&p<p2+s2)||(p2<p+s&&p+s<p2+s2)); if(overx && overy){ distl=newpos2[0]+data2.size[0]-newpos[0]; distr=newpos[0]+data.size[0]-newpos2[0]; distt=newpos2[1]+data2.size[1]-newpos[1]; distb=newpos[1]+data.size[1]-newpos2[1]; if(data.vel[0]>0) { if(data.vel[1]>0) { if(distr<distb) { newpos[0]-=2*distr; data.vel[0]=-data.vel[0]; data2.vel[0]=-data.vel[0]; } else { newpos[1]-=2*distb; data.vel[1]=-data.vel[1]; data2.vel[1]=-data.vel[1]; } } else { if(distr<distt) { newpos[0]-=2*distr; data.vel[0]=-data.vel[0]; data2.vel[0]=-data.vel[0]; } else { newpos[1]+=2*distt; data.vel[1]=-data.vel[1]; data2.vel[1]=-data.vel[1]; } } } else{ if(data.vel[1]>0) { if(distl<distb) { newpos[0]+=2*distl; data.vel[0]=-data.vel[0]; data2.vel[0]=-data.vel[0]; } else { newpos[1]-=2*distb; data.vel[1]=-data.vel[1]; data2.vel[1]=-data.vel[1]; } } else{ if(distl<distt) { newpos[0]+=2*distl; data.vel[0]=-data.vel[0]; data2.vel[0]=-data.vel[0]; } else { newpos[1]+=2*distt; data.vel[1]=-data.vel[1]; data2.vel[1]=-data.vel[1]; } } } } i2.setTag(JSON.stringify(data2)); } var t; //right t=(newpos[0]+ data.size[0])-( cont.getPositionX()+cont.getWidth()/cont.getPositionScale() ) ; if(t>0){newpos[0]-=2*t; data.vel[0]=-data.vel[0];} //bottom t=(newpos[1]+ data.size[1])-( cont.getPositionY()+cont.getHeight()/cont.getPositionScale() ) ; if(t>0){newpos[1]-=2*t; data.vel[1]=-data.vel[1];} //left t= newpos[0]- cont.getPositionX(); if(t<0){newpos[0]-=2*t; data.vel[0]=-data.vel[0];} //top t= newpos[1]- cont.getPositionY(); if(t<0){newpos[1]-=2*t; data.vel[1]=-data.vel[1];} //set and repeat i.setPosition(newpos[0] , newpos[1] ); i.setTag(JSON.stringify(data)); } if(!changed)return; setTimeout(tick,1000/frecuency); } </code>

script_llxperiment_boing_no_overlap.1400322275.txt.gz · Last modified: 2014/05/17 10:24 by lm13