2016-07-23 2 views
-1

Flash에서의 코딩을 위해 ActionScript 3을 사용하여 직접 게임을 만들고 있습니다. 게임은 달리기, 점프, 죽는 등의 슈퍼 마리오와 스티키 맨과 같은 러너 캐릭터에 관한 것입니다. 다른 장면에서 게임의 각 창을 나눠서 매우 조직 된 후, 나는 여전히 그래서 "gotoAndStop()"코드를 실행하는 데 문제가있었습니다. 그래서 한 개의 씬을 사용하여 훨씬 간단하게 만들었지 만, 메인 타임 라인의 다른 프레임에 게임의 각 바람을 넣기로했습니다. 그래서 나는 루트에서 일했지만 여전히 흰색 스크린에 갇힌 동일한 문제를 겪고 있습니다!플래시 게임 Actionscript-3 출력 오류 # 1009

어쨌든, 내가 직면 한 주된 문제 중 하나는 오류 # 1009입니다. 같은 주제로 다른 주제를 읽으려고했지만 그 답을 찾지 못했습니다.

가 가 가
import flash.events.KeyboardEvent; 
import flash.events.Event; 
import flash.display.MovieClip; 

import flash.geom.Rectangle; 
stop(); 

var KeyThatIsPressed:uint; 
var rightKeyIsDown:Boolean = false; 
var leftKeyIsDown:Boolean = false; 
var upKeyIsDown:Boolean = false; 
var downKeyIsDown:Boolean = false; 

var score:int = 0; 
var lives:int = 3; 
player_mc.health = 100; 
player_mc.dead = false; 
//var TouchRestartBox:Boolean = false; 

var playerSpeed:Number = 8; 
var gravity:Number = 2; 
var yVelocity:Number = 0; 
var canJump:Boolean = false; 
var canDoubleJump: Boolean = false; 

//var appleCount:int; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, PressAKey); 
stage.addEventListener(KeyboardEvent.KEY_UP, ReleaseAKey); 

stage.addEventListener(Event.ENTER_FRAME, cameraFollowCharacter); 

function cameraFollowCharacter(event:Event):void 
{ 
scrollRect = new Rectangle(player_mc.x - stage.stageWidth/2, player_mc.y - stage.stageHeight/2, stage.stageWidth, stage.stageHeight); 
} 

//PressKey function here 
function PressAKey(event:KeyboardEvent):void 
{ 
    if(event.keyCode == Keyboard.RIGHT) 
    { 
    rightKeyIsDown = true; 
    } 
    if(event.keyCode == Keyboard.LEFT) 
    { 
    leftKeyIsDown = true; 
    } 
    if(event.keyCode == Keyboard.UP) 
    { 
    upKeyIsDown = true; 
    } 
    if(event.keyCode == Keyboard.DOWN) 
    { 
    downKeyIsDown = true; 
    } 
} 

//ReleaseKey function here 
function ReleaseAKey(event:KeyboardEvent):void 
{ 
    if(event.keyCode == Keyboard.RIGHT) 
    { 
    rightKeyIsDown = false; 
    } 
    if(event.keyCode == Keyboard.LEFT) 
    { 
    leftKeyIsDown = false; 
    } 
    if(event.keyCode == Keyboard.UP) 
    { 
    upKeyIsDown = false; 
    } 
    if(event.keyCode == Keyboard.DOWN) 
    { 
    downKeyIsDown = false; 
    } 
} 

//stage.addEventListener(Event.ENTER_FRAME, GameOver); 

stage.addEventListener(Event.ENTER_FRAME, movePlayer); 

function movePlayer(event:Event):void 
{ 


if(!rightKeyIsDown && !leftKeyIsDown && !upKeyIsDown) 
{ 
    player_mc.gotoAndStop(1); 
}  

if(rightKeyIsDown) 
{ 
player_mc.gotoAndStop(2); 
player_mc.x+= playerSpeed; 
player_mc.scaleX = 0.59; 
} 

if(leftKeyIsDown) 
{ 
player_mc.gotoAndStop(2);  
player_mc.x-= playerSpeed; 
player_mc.scaleX = -0.59; 
} 

if(upKeyIsDown && canJump) 
{ 
player_mc.gotoAndStop(3); 
yVelocity = -15; 
canJump = false; 
canDoubleJump = true; 
} 

if(upKeyIsDown && canDoubleJump && yVelocity > -2) 
{ 
    yVelocity = -13; 
    canDoubleJump = false; 
} 

yVelocity +=gravity; 

if(!floor_mc.hitTestPoint(player_mc.x,player_mc.y, true)) 
{ 
player_mc.y+=yVelocity; 
} 

if(yVelocity > 20) 
{ 
yVelocity =20; 
} 

for(var i:int=0; i<10; i++) 
{ 
    if(floor_mc.hitTestPoint(player_mc.x, player_mc.y, true)) 
    { 
    player_mc.y--; 
    yVelocity = 0; 
    canJump = true; 
    } 
} 

for(var j:int=0; j<=2; j++) 
{ 
    if(rb.hitTestPoint(player_mc.x, player_mc.y, true)) 
    { 
     player_mc.x = -1703.35; 
     player_mc.y = 322.1; 
     player_mc.scaleX = 0.59; 
     lives = lives - 1; 
    } 

    if(lives == 0) 
    { 
//   GameOver(); 
    // remove all the event listeners 
// stage.removeEventListener(Event.ENTER_FRAME, GameOver); 
    stage.removeEventListener(Event.ENTER_FRAME, movePlayer); 
    stage.removeEventListener(KeyboardEvent.KEY_DOWN, PressAKey); 
    stage.removeEventListener(KeyboardEvent.KEY_UP, ReleaseAKey); 
    stage.removeEventListener(Event.ENTER_FRAME, cameraFollowCharacter); 
gotoAndStop(124); 
//(root as MovieClip).gotoAndStop(124); 
     } 
    } 


// appleCount_txt.text = "Apples:" + appleCount; 
} 


/*function GameOver() 
{ 
// lives = 3; 


// remove all the event listeners 
stage.removeEventListener(Event.ENTER_FRAME, GameOver); 
stage.removeEventListener(Event.ENTER_FRAME, movePlayer); 
stage.removeEventListener(KeyboardEvent.KEY_DOWN, PressAKey); 
stage.removeEventListener(KeyboardEvent.KEY_UP, ReleaseAKey); 
stage.removeEventListener(Event.ENTER_FRAME, cameraFollowCharacter); 

// player_mc.stop(); 
gotoAndStop(1); // this has your "dead" screen on it. 
}*/ 
가 가 가

은 누구도 날이 문제 좀 해결을 도와 드릴까요 :

는 오류입니다 : 코드는 여기에

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at HR4_fla::MainTimeline/movePlayer() 
TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at Apple/update() 

입니까? 감사합니다.

+0

'movePlayer'에서'gotoAndStop (124)'바로 뒤에'return()'이 누락되었습니다. 웬일인지'hitTestPoint()'를 두 번 확인하고있다. 처음으로'gotoAndStop()'이 실행되고 두 번째 루프에서'player_mc'가 이미 null이다. – Vesper

+0

아마'Apple.update() '의 문제는 거의 같지만 기능 코드 없이는 더 정확하게 말할 수 없습니다. – Vesper

+0

친절한 답변을 해주신 @Vesper에게 감사드립니다. 실제로 나는 그들 각각에 역할이 있기 때문에 두 번 hitTestPoint()를 사용하고 있습니다. 첫 번째는 플레이어가 땅 위를 걷게하는 것이 었습니다. 두 번째 것은 플레이어가 죽을 때 죽게 된 숨겨진 라인에 할당되었지만 – Hadi

답변

1

프레임이 변경된 후에도 여전히 수신기가 실행 중입니다. 해당 처리기에서 해당 프레임에 존재하지 않는 개체가 참조되어 null입니다. 프레임을 변경하면 시각적 인 변경 만 가능하며 완전한 상태 변경은 아닙니다.

+1

이 링크가 질문에 대답 할 수 있지만 여기에 답변의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다 - [검토 중] 리뷰/낮은 품질의 게시물/13111638) –

+1

@Jacques Snyman 그게 SO의 설명서에도 적용되는지 잘 모르겠다. 좋은 습관 인 것 같아요. 다칠 수 없어요. 편집 : – null

+0

아무도 도와 줄 수 있습니까? – Hadi