あなたが参照してゲームを見てみると、それはあなたには、いくつかの衝突検出が必要になるだろうことは明らかです。 pixel-level collision detectionのこのチュートリアルは、あなたを始めるのに便利かもしれません。
現在の設定では、図面のスピードを上げるために表示される唯一の方法は、FLAのフレームレートを上げることです。
現在プレーヤインスタンスにアクセスできないため、プレーヤインスタンスをメインクラスの子として追加することはできません。実際、プレイヤークラス内に複数のスプライトを作成することは非常に非効率的です。より効率的なアプローチは、プレーヤインスタンスのグラフィックスインスタンス内に直接四角形を描画することです。
私は次のことが、あなたがやろうとしていることの出発点になるかもしれないと思います。繰り返しますが、私が何をしているのかを説明することを希望するコメントをいくつか挙げました。
package {
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class MainTrink extends MovieClip {
// define a list of players, their color, and controls
// this should make it easier to vary the number of players
private var players:Array = [
{color: 0xff0000, left: Keyboard.A, right: Keyboard.S},
{color: 0x0000ff, left: Keyboard.O, right: Keyboard.P},
{color: 0x00ff00, left: Keyboard.NUMBER_1, right: Keyboard.NUMBER_2},
{color: 0xffff00, left: Keyboard.LEFT, right: Keyboard.RIGHT},
];
public function MainTrink() {
var playerData:Object;
var player:PlayerTrink;
// Create a player instance for each player specified in the players array
for (var i:int = 0; i < players.length; i ++)
{
playerData = players[i];
player = new PlayerTrink();
player.color = playerData.color;
player.init();
this.addChild(player);
// Add a reference to the instance back onto the players
// list so that we can access it easily in other methods
playerData.player = player;
}
// add listeners for keyboard events
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyDown);
this.stage.addEventListener(KeyboardEvent.KEY_UP, _onKeyUp);
}
private function _onKeyDown(event:KeyboardEvent):void
{
var playerData:Object;
var player:PlayerTrink;
// Check whether pressed key is a control for one of our players
for (var i:int = 0; i < players.length; i ++)
{
playerData = players[i];
player = PlayerTrink(playerData.player);
if (event.keyCode == playerData.left)
player.leftKeyDown = true;
if (event.keyCode == playerData.right)
player.rightKeyDown = true;
}
}
private function _onKeyUp(event:KeyboardEvent):void
{
var playerData:Object;
var player:PlayerTrink;
for (var i:int = 0; i < players.length; i ++)
{
playerData = players[i];
player = PlayerTrink(playerData.player);
if (event.keyCode == playerData.left)
player.leftKeyDown = false;
if (event.keyCode == playerData.right)
player.rightKeyDown = false;
}
}
}
}
そして、FLAと同じディレクトリにこのファイルを含める:
package {
// Need to import other classes referenced within this class
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.ui.Keyboard;
// By convention classes are usually named using CamelCase
public class PlayerTrink extends MovieClip {
// Move your properties out of your class constructor
private const TURNSPEED:Number = 0.1;
private var posX:Number = 50;
private var posY:Number = 50;
private var dirX:Number = 1;
private var dirY:Number = 1;
private var dir:Number = 0;
private var _leftKeyDown:Boolean = false;
private var _rightKeyDown:Boolean = false;
private var _color:Number;
public function PlayerTrink() {
// constructor code
}
public function init():void
{
this.addEventListener(Event.ENTER_FRAME, _onEnterFrame);
}
private function _onEnterFrame(e:Event):void {
if(_leftKeyDown) dir -= TURNSPEED;
if(_rightKeyDown) dir += TURNSPEED;
dirX = Math.cos(dir);
dirY = Math.sin(dir);
posX += dirX;
posY += dirY;
drawRect(posX, posY);
}
private function drawRect(x:Number, y:Number):void {
this.graphics.beginFill(_color);
this.graphics.drawRect(x, y, 4, 4);
this.graphics.endFill();
}
public function set leftKeyDown(value:Boolean):void
{
_leftKeyDown = value;
}
public function set rightKeyDown(value:Boolean):void
{
_rightKeyDown = value;
}
public function set color(value:Number):void
{
_color = value;
}
}
}
をFLAファイルのドキュメントクラスとしてこれを設定し