Je suis en train de construire le mécanisme de dégâts pour mon jeu. Deux classes gèrent cela, la classe 'blessé' et la classe 'collision'. La classe blessée passe une instance de lui-même à la méthode 'hurtCollision' de la classe de collision, de sorte que la classe de collision peut détecter une collision entre le joueur et cette instance de blessé (qui est un objet d'affichage). Lorsque je tente d'accéder à cette fonction cependant, je reçois cette erreur:Pourquoi une erreur se produit-elle lorsque j'essaie d'accéder à une fonction publique d'une classe? (Actionscript 3)
1061: Call to a possibly undefined method hurtCollision through a reference with static type Class.
Voici les deux classes:
La classe de collision (vous pouvez juste ctrl f à hurtCollision):
package
{
import flash.display.MovieClip;
public class Collision extends MovieClip
{
private var e:*;
static public var _playerX:*;
static public var _playerY:*;
private var HIT_BOTTOM_1X:Number;
private var HIT_BOTTOM_2X:Number;
private var HIT_BOTTOM_3X:Number;
private var HIT_TOP_1X:Number;
private var HIT_TOP_2X:Number;
private var HIT_TOP_3X:Number;
private var HIT_R_1X:Number;
private var HIT_R_2X:Number;
private var HIT_R_3X:Number;
private var HIT_L_1X:Number;
private var HIT_L_2X:Number;
private var HIT_L_3X:Number;
private var HIT_BOTTOM_1Y:Number;
private var HIT_BOTTOM_2Y:Number;
private var HIT_BOTTOM_3Y:Number;
private var HIT_TOP_1Y:Number;
private var HIT_TOP_2Y:Number;
private var HIT_TOP_3Y:Number;
private var HIT_R_1Y:Number;
private var HIT_R_2Y:Number;
private var HIT_R_3Y:Number;
private var HIT_L_1Y:Number;
private var HIT_L_2Y:Number;
private var HIT_L_3Y:Number;
public function Collision(enginePass:*)
{
e = enginePass;
}
public function detectCollisions(object:*):void
{
_playerX = e._player.x;
_playerY = e._player.y;
HIT_BOTTOM_1X = object.x - object.width/2;
HIT_BOTTOM_2X = object.x;
HIT_BOTTOM_3X = object.x + object.width/2;
HIT_TOP_1X = object.x - object.width/2;
HIT_TOP_2X = object.x;
HIT_TOP_3X = object.x + object.width/2;
HIT_R_1X = object.x + object.width/2;
HIT_R_2X = object.x + object.width/2;
HIT_R_3X = object.x + object.width/2;
HIT_L_1X = object.x - object.width/2;
HIT_L_2X = object.x - object.width/2;
HIT_L_3X = object.x - object.width/2;
HIT_BOTTOM_1Y = object.y + object.height/2;
HIT_BOTTOM_2Y = object.y + object.height/2;
HIT_BOTTOM_3Y = object.y + object.height/2;
HIT_TOP_1Y = object.y - object.height/2;
HIT_TOP_2Y = object.y - object.height/2;
HIT_TOP_3Y = object.y - object.height/2;
HIT_R_1Y = object.y + object.height/2 - object.height/4;
HIT_R_2Y = object.y;
HIT_R_3Y = object.y - object.height/2 + object.height/4;
HIT_L_1Y = object.y + object.height/2 - object.height/4;
HIT_L_2Y = object.y;
HIT_L_3Y = object.y - object.height/2 - object.height/4;
if(e._ground.hitTestPoint(HIT_BOTTOM_1X,HIT_BOTTOM_1Y,true) || e._ground.hitTestPoint(HIT_BOTTOM_2X,HIT_BOTTOM_2Y,true)
|| e._ground.hitTestPoint(HIT_BOTTOM_3X,HIT_BOTTOM_3Y,true))
{
e._touchGround = true;
if(e._vy < 0)
{
e._vy = 0;
}
}
if(e._ground.hitTestPoint(HIT_TOP_1X,HIT_TOP_1Y,true) || e._ground.hitTestPoint(HIT_TOP_2X,HIT_TOP_2Y,true)
|| e._ground.hitTestPoint(HIT_TOP_3X,HIT_TOP_3Y,true))
{
e._jump = false;
e._vy = -(e._vy) - 5;
}
if(e._ground.hitTestPoint(HIT_R_1X,HIT_R_1Y,true) || e._ground.hitTestPoint(HIT_R_2X,HIT_R_2Y,true)
|| e._ground.hitTestPoint(HIT_R_3X,HIT_R_3Y,true))
{
if(e._vx > 0)
{
e._vy += e._vx;
}
if(e._ground.hitTestPoint(HIT_TOP_3X, HIT_TOP_3Y, true))
{
if(e._vx > 0)
{
e._vx = -(e._vx) *2;
}
}
}
if(e._ground.hitTestPoint(HIT_L_1X,HIT_L_1Y,true) || e._ground.hitTestPoint(HIT_L_2X,HIT_L_2Y,true)
|| e._ground.hitTestPoint(HIT_L_3X,HIT_L_3Y,true))
{
if(e._vx < 0)
{
e._vy += Math.abs(e._vx);
}
if(e._ground.hitTestPoint(HIT_TOP_1X, HIT_TOP_1Y, true))
{
if(e._vx < 0)
{
e._vx = -(e._vx) *2;
}
}
}
if(e._ground.hitTestPoint(HIT_TOP_3X, HIT_TOP_3Y, true) && e._ground.hitTestPoint(HIT_BOTTOM_3X, HIT_BOTTOM_3Y, true))
{
e._vy += 20;
}
if(e._ground.hitTestPoint(HIT_TOP_1X, HIT_TOP_1Y, true) && e._ground.hitTestPoint(HIT_BOTTOM_1X, HIT_BOTTOM_1Y, true))
{
e._vy += 20;
}
if(e._ground.hitTestPoint(e._player.x,e._player.y, true))
{
e._vy = -(e._vy);
e._vx = -(e._vx);
}
else
{
if(!(e._ground.hitTestPoint(HIT_BOTTOM_1X,HIT_BOTTOM_1Y,true) || e._ground.hitTestPoint(HIT_BOTTOM_2X,HIT_BOTTOM_2Y,true)
|| e._ground.hitTestPoint(HIT_BOTTOM_3X,HIT_BOTTOM_3Y,true)))
{
e._vy -= 1;
e._touchGround = false;
}
}
}
public function hurtCollision(hurtObject:*)
{
if(hurtObject.hitTestPoint(HIT_BOTTOM_1X,HIT_BOTTOM_1Y,true) || hurtObject.hitTestPoint(HIT_BOTTOM_2X,HIT_BOTTOM_2Y,true)
|| hurtObject.hitTestPoint(HIT_BOTTOM_3X,HIT_BOTTOM_3Y,true))
{
e.hurtPlayer();
}
if(hurtObject.hitTestPoint(HIT_TOP_1X,HIT_TOP_1Y,true) || hurtObject.hitTestPoint(HIT_TOP_2X,HIT_TOP_2Y,true)
|| hurtObject.hitTestPoint(HIT_TOP_3X,HIT_TOP_3Y,true))
{
e.hurtPlayer();
}
if(hurtObject.hitTestPoint(HIT_R_1X,HIT_R_1Y,true) || hurtObject.hitTestPoint(HIT_R_2X,HIT_R_2Y,true)
|| hurtObject.hitTestPoint(HIT_R_3X,HIT_R_3Y,true))
{
e.hurtPlayer();
}
if(hurtObject.hitTestPoint(HIT_L_1X,HIT_L_1Y,true) || hurtObject.hitTestPoint(HIT_L_2X,HIT_L_2Y,true)
|| hurtObject.hitTestPoint(HIT_L_3X,HIT_L_3Y,true))
{
e.hurtPlayer();
}
}
}
}
La classe mal:
package
{ flash.display.MovieClip d'importation; import flash.events.Event; import Collision;
public class Hurt extends MovieClip
{
public function Hurt()
{
addEventListener(Event.ENTER_FRAME, enterFrame);
}
private function enterFrame(e:Event)
{
Collision.hurtCollision(this);
}
}
}
EDIT: Juste pour vous le savez tous, e.hurtPlayer est juste la méthode de classe de document qui contrôle la santé du joueur.
Si vous indentez tous vos espaces de code 4, il sera formaté correctement, fyi. – rfunduk