먼저 저는 아직 코딩이 처음 이니 편하게하세요. 코드를 보여주기 전에 약간의 뒤 추적. ActionScript 3로 게임을 만드는 방법에 대한 책을 받았는데, Adobe animate / flash가 아닌 Photoshop과 Flash Builder를 함께 사용한다는 가정하에 주로 작동한다는 것뿐입니다. 따라서 이미지 삽입과 같은 작업을 수행하고 이미지를 정의하기 위해 코드를 변경하는 방법을 잘 모르겠습니다. 이것이 바로 문제입니다. 그러나 동시에 스테이지는 정의되지 않은 액세스로 나타납니다! 제 말은 무대가 어떻게 정의되지 않을 수 있는지를 의미합니다 ... 음, 어쨌든 정의되지 않은 속성 중 하나의 예는 다음과 같습니다.
///
class BetterScrolling extends Sprite
var ForegroundImage: Class;
var foregroundImage: DisplayObject = ForegroundImage();
var foreground = ForegroundImage;
///
중간에 몇 가지 코드가 있습니다.
///
function BetterScrolling(){
foreground.x = -((foreground.width - stage.width) / 2);
foreground.y = -((foreground.height - stage.height) / 2);
}
///
이 코드의 요점은 스크롤링 배경을 만드는 것입니다. 그러나 나는 X와 Y 변수가 있기 때문에 다소 복잡하지만 전경 외에도 느린 배경도 있습니다. 나는 지금 완전한 코드에 링크 할 것이다. http://pastebin.com/WHg9DGsB 내가 이유를 염두에두고 만든 그 코드의 모든 변경은 어리석은 것이더라도 ... 그러지 말아라. 내가 확신하는 다른 오류에주의가 산만 해졌습니다. 지금은 내 이미지를 정의하는 것뿐입니다.
코드 컴파일을 방해하는 여러 가지 문제가 있습니다.
클래스가로드되면 스테이지를 사용할 수 없습니다. 함수 내부에없는 코드는 애플리케이션이 초기화 될 때 실행됩니다 (화면에 아무것도 표시되기 전에). 다음 줄로 인해 오류가 발생합니다.
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandHandler);
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
스테이지가 아직 존재하지 않을 때 이러한 행은 클래스 선언에 떠 있습니다.
원하는 것은 해당 코드 (및 변수 또는 함수 정의가 아닌 코드)를 함수로 이동하는 것입니다. 즉시 실행하려면 생성자 (클래스와 같은 이름의 함수)에 넣으십시오. 그러나 생성자에서 스테이지를 항상 사용할 수있는 것은 아니므로 안전을 위해 다음을 수행해야합니다.
function BetterScrolling() {
if(!stage){
this.addEventListener(Event.ADDED_TO_STAGE, stageReady);
}else{
stageReady();
}
}
function stageReady(e:Event = null):void {
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandHandler);
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
//any other code that needs the stage and should run as soon as possible
}
어디에도 속하지 않는 괄호와 코드가 많이 있습니다. 45-71 행은 제대로 컴파일되지 않습니다. 대부분의 경우 생성자 / 스테이지 준비 메서드에서도 해당 코드를 원하므로이를 추가하면 다음과 같은 결과를 얻을 수 있습니다.
function BetterScrolling() {
if(!stage){
this.addEventListener(Event.ADDED_TO_STAGE, stageReady);
}else{
stageReady();
}
}
function stageReady(e:Event = null):void {
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandHandler);
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
foreground.x = -((foreground.width - stage.width) / 2);
foreground.y = -((foreground.height - stage.height) / 2);
background.x = -((background.width - stage.width) / 2);
background.y = -((background.height - stage.height) / 2);
cloud.x = -((cloud.width - stage.width) / 2);
cloud.y = -((cloud.height - stage.height) / 2);
character.x = 370
character.y = 320
rightInnerBoundary = (stage.stageWidth / 2) + (stage.stageWidth / 4)
leftInnerBoundary = (stage.stageWidth / 2) + (stage.stageWidth / 4)
topInnerBoundary = (stage.stageHeight / 2) + (stage.stageHeight / 4)
bottomInnerBoundary = (stage.stageHeight / 2) + (stage.stageHeight / 4)
}
빈 클래스 인 변수가있는 경우 인스턴스화하려고합니다.
var BackgroundImage: Class;
var backgroundImage: DisplayObject = BackgroundImage();
BackgroundImage
null / undefined 이므로 런타임 오류가 발생합니다 . FlashPro의 라이브러리 객체를 클래스로 내보내고 싶습니까? 그렇게하려면 라이브러리에서 해당 개체를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동합니다. '액션 스크립트 내보내기'를 선택하고 클래스 이름을 지정하십시오. 이 경우 BackgroundImage라고합니다. 그런 다음 위 코드를 다음으로 바꿉니다.
var backgroundImage:BackgroundImage = new BackgroundImage();
제쳐두고, 다른 객체 / 클래스를 참조하고 생성자에서 인스턴스화하는 클래스 vars 만 선언하는 것이 더 안전합니다. 그렇게 변경하려면 위의 줄을 다음과 같이 변경하십시오.
var backgroundImage:BackgroundImage;
그런 다음 생성자에서 다음을 수행하십시오.
backgroundImage = new BackgroundImage();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다