0
我對Flash很新,目前我正在嘗試開發一款小遊戲。但我的對手不再突然工作了。我不得不承認,我剛剛從我的教授那裏複製了對撞機部分,我不知道他們是如何工作的。 當我插入位於舞臺的整個背景的「BG」時,它工作得很好。現在我想讓我的角色與遊戲中的每個平臺發生衝突。 嗯,它工作過。突然它有問題。爲什麼?! :/閃光對撞機不能工作
的Char_Collider_feet在我Character_Control 的Platform_Collider是在BG的MovieClip它位於舞臺...
錯誤信息:「空對象引用Error」錯誤1009 我知道我方法,但我不能找到它的原因,特別是因爲它在我的其他項目的工作......(好吧我不使用文檔類有)
主要
package
{
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.events.Event;
import flash.ui.Keyboard;
public class Main extends MovieClip
{
public var char:Character_Control;
public var figure:MovieClip;
public var BG:MovieClip;
public var Platform:Platform_Collider;
var allKeys:Object = new Object();
var oCollider;
public function Main()
{
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
this.stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
this.stage.addEventListener(Event.ENTER_FRAME, update);
this.stage.addEventListener(Event.ENTER_FRAME, Gravity);
Start();
}
//Creates Chars and Objects
public function Start()
{
char = new Character_Control(150,450);
stage.addChild(char);
}
//Key pressed
function keyPressed(e:KeyboardEvent)
{
allKeys[e.keyCode] = true;
}
//Key released
function keyReleased(e:KeyboardEvent)
{
if(allKeys[e.keyCode] != null)
allKeys[e.keyCode] = false
char.stopMove();
}
//Sends keyCode to Character_Control
function update(e:Event)
{
//Walk
if(allKeys[Keyboard.LEFT])
{char.Move("walk_left");}
else if(allKeys[Keyboard.RIGHT])
{char.Move("walk_right");}
//Jump
if(allKeys[Keyboard.SPACE])
{char.Move("jump");}
//Idle
char.Move("idle");
}
//Tests Collision with Background
function Gravity(_event:Event)
{
//Insert Object which hits "char"
oCollider = char.hitBGCollider(BG);
if (oCollider)
{
char.Fall(true);
trace("I collide!");
}
else
{
char.Fall(false);
trace("I fall!");
}
}
}
}
Characte r_Control
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.geom.*;
public class Character_Control extends MovieClip
{
public var figure:MovieClip;
var speed:int = 5;
var currentSpeed:int = 0;
var jumpPower:int = 5;
var gravity:Number = 0.9;
var isJumping:Boolean = false;
var aCollider:Array = new Array();
public function Character_Control(posx:Number,posy:Number)
{
this.x = posx;
this.y = posy;
this.addEventListener("RegisterCharColliderFeet", RegisterCharColliderFeet);
this.addEventListener(Event.ENTER_FRAME, update);
}
//Controls Jumps
public function update(e:Event)
{
if(figure.currentAnim=="jumpUP")
{
figure.y -=jumpPower;
}
else if(figure.currentAnim=="jumpDOWN")
{
figure.y +=jumpPower;
}
}
//Moves Character, after Keyboard input received
public function Move(_action:String)
{
switch(_action)
{
case "walk_left":
figure.scaleX = -1;
currentSpeed = 5;
figure.x -= currentSpeed*scaleX;
if(figure.currentAnim=="nothing" || figure.currentAnim=="idle")
{
figure.setAnimation("walk");
isJumping = false;
}
break;
case "walk_right":
figure.scaleX = 1;
currentSpeed = 5;
figure.x += currentSpeed*scaleX;
if(figure.currentAnim=="nothing" || figure.currentAnim=="idle")
{
figure.setAnimation("walk");
isJumping = false;
}
break;
case "jump":
if(!isJumping)
{
figure.setAnimation("jump");
isJumping = true;
}
break;
case "idle":
if(figure.currentAnim=="nothing")
{
figure.setAnimation("idle");
isJumping = false;
}
break;
default:
figure.setAnimation("idle");
break;
}
}
//Stopps Move after Key Released
public function stopMove()
{
if (figure.currentAnim=="walk")
{figure.setAnimation("idle");}
}
//For Char_Collider_fett
public function RegisterCharColliderFeet(_event:Event)
{
aCollider.push(_event.target);
_event.target.visible = false;
}
//Tests Collision with the Object received
public function hitBGCollider(_oTest:MovieClip):Char_Collider_feet
{
var posTest:Point = new Point();
for each (var oCollider:Char_Collider_feet in aCollider)
{
posTest.x = oCollider.x;
posTest.y = oCollider.y;
posTest = figure.localToGlobal(posTest);
if (_oTest.hitTestPoint(posTest.x,posTest.y,true))
{
return oCollider;
}
}
return null;
}
//Falls every Frame until Collision
public function Fall(collision:Boolean)
{
if (collision)
{
gravity *= 1.1;
figure.y +=2*gravity;
}
}
}
}
沒有,同樣的問題:/不知它不會找到我的對撞機,但不知道爲什麼... – Fuby
還可以,但你要討論這個問題在引擎的論壇上。因爲我認爲這是你的引擎的一個具體問題。也許你需要那樣的東西? 'public var BG:Platform_Collider = new Platform_Collider(這裏可能需要一些參數);' –
你的引擎是什麼意思? Flash CS5,動作腳本3 ....以及有趣的是它與公共變量BG:MovieClip;但沒有了,所以我嘗試了不同的東西......它在我的其他項目上的作品雖然... – Fuby