Hi,
I need you to fix this code, I want to make it so you cannot simply hold jump to climb up the walls. I want the high walls to be walls and jumping against them just jumps vertically and doesnt get you stuck / climb. Here is my source so far:
// Map polygon
var points:Array = new Array({x:1232, y:572}, {x:1232, y:44}, {x:1042, y:44}, {x:1042, y:416}, {x:842, y:416}, {x:842, y:331}, {x:766, y:331}, {x:766, y:412}, {x:545, y:406}, {x:463, y:334}, {x:309, y:334}, {x:227, y:404}, {x:41, y:404}, {x:41, y:9}, {x:-159, y:9}, {x:-159, y:572});
// Store sin and cos values
var ang_num:Number = 10;
var sin_a:Array = new Array(ang_num);
var cos_a:Array = new Array(ang_num);
for (var i:Number = 0; i<ang_num; i++) {
var ang:Number = Math.PI*2/ang_num*i;
sin_a[i] = Math.sin(ang);
cos_a[i] = Math.cos(ang);
}
// Collision detection
function isInside(points:Array, x:Number, y:Number):Boolean {
var angle:Number = 0;
var pl:Number = points.length;
for (var i:Number = 0; i<pl; i++) {
var j:Number;
if (i == pl-1) {
j = 0;
} else {
j = i+1;
}
var a:Object = points[i];
var b:Object = points[j];
var x1:Number = a.x-x;
var y1:Number = a.y-y;
var x2:Number = b.x-x;
var y2:Number = b.y-y;
var t1:Number = Math.atan2(y1, x1);
var t2:Number = Math.atan2(y2, x2);
var dt:Number = t2-t1;
while (dt>Math.PI) {
dt -= Math.PI*2;
}
while (dt<(-Math.PI)) {
dt += Math.PI*2;
}
angle += dt;
}
if (angle<0) {
angle = -angle;
}
return angle>Math.PI*0.5;
}
// Normal algorithm
function normal(points:Array, x:Number, y:Number):Object {
var nx:Number = 0;
var ny:Number = 0;
for (var i:Number = 0; i<ang_num; i++) {
var ax:Number = sin_a[i];
var ay:Number = cos_a[i];
if (isInside(points, x-ax*4, y-ay*4)) {
nx += ax;
ny += ay;
}
if (isInside(points, x-ax*8, y-ay*8)) {
nx += ax;
ny += ay;
}
}
if (nx == 0 && ny == 0) {
return {err:true};
}
var nl:Number = 1/Math.sqrt(nx*nx+ny*ny);
nx *= nl;
ny *= nl;
return {err:false, x:nx, y:ny};
}
// Draw map
_root.lineStyle(1,0x00ff00,100);
_root.beginFill(0x00ff00,50);
_root.moveTo(points[0].x,points[0].y);
for (var i:Number = 1; i<points.length; i++) {
_root.lineTo(points[i].x,points[i].y);
}
_root.lineTo(points[0].x,points[0].y);
_root.endFill();
// To displace (not binary style)
function displace() {
var n:Object = normal(points, x, y);
if (!n.err) {
nx = n.x*0.2;
ny = n.y*0.2;
while (isInside(points, x += nx, y += ny)) {
grav = 0;
jumping = false;
}
}
}
// Movement
var x:Number = 400;
var y:Number = 150;
var grav:Number = 0;
var jumping:Boolean = false;
onEnterFrame = function () {
if (Key.isDown(Key.UP) && !jumping) {
jumping = true;
grav = -10;
}
grav++;
y += grav;
speed = Key.isDown(Key.RIGHT)*7;
speed -= Key.isDown(Key.LEFT)*7;
x += speed;
if (isInside(points, x, y)) {
displace();
}
t_mc._x = x;
t_mc._y = y;
};
Don't forget to place a movieClip called t_mc on stage.
Also note this must be in AS1.
Don't recode this, just add some lines (comment the lines you added so I can see).
As a reward you get nothing. No credit, no moneys and I can sell your code and do whatever I please with it.
Kthnxbai