Решил сделать платформер на flash, столкнулся с проблемой что hitTestPoint не работает. В чем может быть проблема?
Герой у меня создается с помощью графики “graphics”.
P.S. Честно говоря не помню какая там проблема была, уже сталкивался с ней очень давно, сейчас позабыл.
Вот пример hitTestPoint:
Код AS3:
if (platform1.hitTestPoint(shape.x, shape.y) && !jumpsetup)
{
shape.x = platform1.x;
onground = true;
jumping = false;
var i = 0;
var objy = Math.floor(y1);
}
А вот полностью код:
Код AS3:
var shape:Sprite = new Sprite();
var x1 = 0;
var y1 = 0;
var dx = 0;
var dy = 0;
var jumpsetup = false;
var onground = false;
var jumping = false;
var shooting = false;
var left_key_down: Boolean = false;
var right_key_down: Boolean = false;
var jump_key_down: Boolean = false;
function createHero()
{
shape.graphics.lineStyle(1, 0x000000, 1);
shape.graphics.beginFill(0x00FFFF, .5);
shape.graphics.drawCircle(0, 0, 20);
shape.x = 150;
shape.y = 150;
addChild(shape);
}
function init()
{
createHero();
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame1);
stage.addEventListener( KeyboardEvent.KEY_DOWN, on_keydown);
stage.addEventListener( KeyboardEvent.KEY_UP, on_keyup);
}
function on_keydown( e : KeyboardEvent ) : void {
//LEFT Key
if (e.keyCode == 37) {
left_key_down = true;
}
//RIGHT Key
else if (e.keyCode == 39) {
right_key_down = true;
}
//Up Key
else if (e.keyCode == 38) {
jump_key_down = true;
}
}
function on_keyup( e : KeyboardEvent ) : void {
//LEFT Key
if (e.keyCode == 37) {
left_key_down = false;
}
//RIGHT Key
else if (e.keyCode == 39) {
right_key_down = false;
}
//Up Key
else if (e.keyCode == 38) {
jump_key_down = false;
}
}
function onEnterFrame1(evn:Event)
{
dy = dy + 0.5;
var y1 = Math.ceil(shape.y + dy);
onground = false;
if (dy >= 0)
{
trace(shape.y);
if (platform1.hitTestPoint(shape.x, shape.y) && !jumpsetup)
{
shape.x = platform1.x;
onground = true;
jumping = false;
var i = 0;
var objy = Math.floor(y1);
}
else
{
if (dy > 5 && !shooting)
{
}
}
}
else
{
}
if (dy > 9)
{
dy = 9;
}
if (!jumpsetup)
{
shape.x = shape.x + dx;
shape.y = shape.y + dy;
}
if (right_key_down) {
if (jumping)
{
dx = dx + 0.4;
}
else
{
dx = dx + 1;
}
}
else
{
if (left_key_down && !shooting)
{
if (jumping)
{
dx = dx - 0.4;
}
else
{
dx = dx - 1;
}
}
else
{
dx = dx * 0.7;
}
}
if (dx > 7)
{
dx = 7;
}
if (dx < -7)
{
dx = -7;
}
if (!jumpsetup && !jumping && !shooting && onground)
{
if (Math.abs(dx) < 0.5)
{
dx = 0;
}
else
{
dy = -9;
jumpsetup = false;
}
}
if (jump_key_down && dy >= 0 && dy < 1 && !jumping)
{
trace("dawad2");
onground = false;
shooting = false;
jumping = true;
jumpsetup = true;
}
shape.x = Math.floor(shape.x);
shape.y = Math.floor(shape.y);
}
init();