私はボールをカノンから発射させようとしていますが、これは問題ありませんが、カノンを描画されたカノンからカノンのイメージに変更したいと考えています。しかし、これを行うと、ステージをクリックしてボールを撃つと次のエラーが発生しますが、描画されたバージョンではボールが計画どおりに撃たれます。
TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。code2/createNewBullet() で code2/mouseClickHandler() で
これは機能するコードです:
private function init():void {
drawBoard = new MovieClip;
drawBoard.graphics.beginFill(0xFFFFFF, 0); // white transparant
drawBoard.graphics.drawRect(0, 0, gameWidth, gameHeight);
drawBoard.graphics.endFill();
addChild(drawBoard);
// create canon
canon = new MovieClip;
canon = new MovieClip;
canon.graphics.beginFill(0x000000);
canon.graphics.drawRect(0, -10, 50, 20);
canon.graphics.endFill();
canon.rotation = -45;
canon.x = 25;
canon.y = gameHeight;
addChild(canon);
これは、大砲に描かれた長方形の代わりに画像を使用するために私がやろうとしていることです ((画像は正常に読み込まれますが、エラーが発生します))
private function init():void {
// create drawboard (the important movieclip, that holds all visible elements)
drawBoard = new MovieClip;
drawBoard.graphics.beginFill(0xFFFFFF, 0); // white transparant
drawBoard.graphics.drawRect(0, 0, gameWidth, gameHeight);
drawBoard.graphics.endFill();
addChild(drawBoard);
var canon:Loader = new Loader();
var fileRequest:URLRequest = new URLRequest("cannon1.png");
canon.load(fileRequest);
canon.rotation = -45;
canon.x = 25;
canon.y = gameHeight;
addChild(canon);
}
必要に応じて、これは完全なコードです。
package {
// Copyright 2010-2011 - Seinia.com
// Find more crazy good AS3.0 tutorials and games on Seinia.com!
// imports
// --------------------------------------------------------------------------------------
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.events.*;
import flash.net.URLRequest;
import flash.display.Loader;
import flash.display.Sprite;
// Game class (MovieClip extension)
// --------------------------------------------------------------------------------------
public class code2 extends MovieClip {
// game properties
// --------------------------------------------------------------------------------------
var drawBoard:MovieClip;
var background:MovieClip;
var gameWidth:int = 600;
var gameHeight:int = 300;
var gravity:Number = .4;
var bullets:Array;
var canon:MovieClip;
// constructor
// --------------------------------------------------------------------------------------
public function code2():void {
this.focusRect = false;
this.init();
addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true);
addEventListener(MouseEvent.CLICK, mouseClickHandler, false, 0, true);
bullets = new Array();
}
// init the game
// --------------------------------------------------------------------------------------
private function init():void {
// create drawboard (the important movieclip, that holds all visible elements)
drawBoard = new MovieClip;
drawBoard.graphics.beginFill(0xFFFFFF, 0); // white transparant
drawBoard.graphics.drawRect(0, 0, gameWidth, gameHeight);
drawBoard.graphics.endFill();
addChild(drawBoard);
var canon:Loader = new Loader();
var fileRequest:URLRequest = new URLRequest("cannon1.png");
canon.load(fileRequest);
canon.rotation = -45;
canon.x = 25;
canon.y = gameHeight;
addChild(canon);
}
// mouse click handler
// --------------------------------------------------------------------------------------
private function mouseClickHandler(event:MouseEvent):void {
createNewBullet();
}
// function to create a new bullet
// --------------------------------------------------------------------------------------
private function createNewBullet():void {
// init and draw bullet
var bullet:MovieClip = new MovieClip;
bullet.graphics.beginFill(0xff0000);
bullet.graphics.drawCircle(0, 0, 10);
bullet.graphics.endFill();
// define bullet start point and speed
var cos:Number = Math.cos(canon.rotation * Math.PI / 180);
var sin:Number = Math.sin(canon.rotation * Math.PI / 180);
var speed:Number = 8;
bullet.x = canon.x + cos * canon.width;
bullet.y = canon.y + sin * canon.width;
bullet.vx = cos * speed;
bullet.vy = sin * speed;
bullets.push(bullet);
addChild(bullet);
}
// enter frame handler
// --------------------------------------------------------------------------------------
private function enterFrameHandler(event:Event):void {
for (var i = 0; i < bullets.length; i++ ) {
// gravity
bullets[i].vy += gravity;
// move bullet
bullets[i].x += bullets[i].vx;
bullets[i].y += bullets[i].vy;
// remove star from stage?
if (bullets[i].y >= gameHeight) {
removeChild(bullets[i]);
bullets.splice(i, 1);
}
}
}
}
}