Talking about String Avoider game, Actionscript 3, Flash and Game development.
Let’s travel back in 2007, when mouse avoider games got played by some million people and rated with five stars out of five.
One of these games featured on this blog was String Avoider, at that time developed with AS2.
Today, I want to post the AS3 version of the prototype, since its gameplay can be extended with interesting features in my opinion, and I am also showing you a way to detect when the string intersects using the line-line intersection concept found on Wikipedia.
The code is not explained, but you can find anything you need in the original post.
I can explain the second script if you don’t find it clear, just leave a comment. I still have to explain the Angry Birds prototype, so be patient, I am in a mood of creation.
So this is the string script:
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Point;
public class Main extends Sprite {
private var tailLenght:Number=1;
private var tailNodes:Number=300;
private var head:headMc=new headMc();
private var tailCanvas:Sprite=new Sprite();
private var nodes:Vector.=new Vector.();
public function Main() {
addChild(head);
head.x=320;
head.y=240;
addChild(tailCanvas);
for (var i:int=0; i
And this is the result:
Move the mouse to control the string/snake.
And this is the second examples, with collisions shown with black dots, and a less smooth string just to show you how it works:
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Point;
public class Main extends Sprite {
private var tailLenght:Number=50;
private var tailNodes:Number=10;
private var head:headMc=new headMc();
private var tailCanvas:Sprite=new Sprite();
private var nodes:Vector.=new Vector.();
public function Main() {
addChild(head);
head.x=320;
head.y=240;
addChild(tailCanvas);
for (var i:int=0; i=1; j--) {
var p:Point=lineIntersection(nodes[j],nodes[j-1],nodes[i],nodes[i+1]);
if (p!=null) {
tailCanvas.graphics.beginFill(0x000000);
tailCanvas.graphics.drawCircle(p.x,p.y,4);
tailCanvas.graphics.endFill();
tailCanvas.graphics.moveTo(nodes[i-1].x,nodes[i-1].y);
}
}
}
tailCanvas.graphics.lineTo(nodes[i].x,nodes[i].y);
}
}
private function lineIntersection(p1:Point,p2:Point,p3:Point,p4:Point):Point {
var x1:Number=p1.x;
var x2:Number=p2.x;
var x3:Number=p3.x;
var x4:Number=p4.x;
var y1:Number=p1.y;
var y2:Number=p2.y;
var y3:Number=p3.y;
var y4:Number=p4.y;
var px:Number=((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4))/((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));
var py:Number=((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4))/((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));
var segment1Len:Number=Math.pow(p1.x-p2.x,2)+Math.pow(p1.y-p2.y,2);
var segment2Len:Number=Math.pow(p3.x-p4.x,2)+Math.pow(p3.y-p4.y,2);
if (Math.pow(p1.x-px,2)+Math.pow(p1.y-py,2)>segment1Len) {
return null;
}
if (Math.pow(p2.x-px,2)+Math.pow(p2.y-py,2)>segment1Len) {
return null;
}
if (Math.pow(p3.x-px,2)+Math.pow(p3.y-py,2)>segment2Len) {
return null;
}
if (Math.pow(p4.x-px,2)+Math.pow(p4.y-py,2)>segment2Len) {
return null;
}
return new Point(px,py);
}
}
}
Here is the result:
Again, move the string with the mouse.
Get the source code and tell me which kind of game would you develop out of it.
Never miss an update! Subscribe, and I will bother you by email only when a new game or full source code comes out.