2012-03-26 2 views
0

내가 내 ActionScript 클래스에 대한 터져 죽자 유사한 게임을 만들고있어 개체 나는 이것이 수행하고 아마 엿 만에 근처에도 아니에요 실현액션 스크립트 - 임의의 수평 이동을 떨어 뜨리는

http://www.groovz.com/play/kaboom/

내 지금까지 코드 :

var bucket:Bucket=new Bucket 
var sun:Sun=new Sun 
var fireBalls:Array=new Array() 
var livesLeft:Array=new Array() 
addChild(bucket) 
addChild(sun) 
sun.x=sun.width/2 
sun.y=50 
bucket.x=bucket.width/2 
bucket.y=stage.stageHeight-50 
bucket.speed=15 

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown) 

function onKeyDown(event:KeyboardEvent){ 
    if (event.keyCode==37&&bucket.x>bucket.width/2){ // left arrow key 
     bucket.x=bucket.x-bucket.speed; 
    } 
    if (event.keyCode==39&&bucket.x<stage.stageWidth-bucket.width/2){ // right arrow key 
     bucket.x=bucket.x+bucket.speed; 
    } 
} 

stage.addEventListener(MouseEvent.MOUSE_MOVE,followBucket); 

function followBucket(event:MouseEvent):void { 
bucket.x=mouseX; 
} 

addEventListener(Event.ENTER_FRAME,onEnterFrame) 

function checkForCollisions(){ 

} 

function onEnterFrame(event:Event){ 
    checkForCollisions.call(); 
    sun.x=sun.x+15; 
    if (fireBalls.length>0&&fireBalls[0].y>stage.stageHeight-20){ // Fireballs exit stage 
     removeChild(fireBalls[0]); 
     fireBalls.shift(); 
    } 
    for (var j:int=0; j<fireBalls.length; j++){ 
     fireBalls[j].y=fireBalls[j].y+15; 
     if (fireBalls[j].y>stage.stageHeight-fireBall.width/2){ 
     } 
    } 
    if (Math.random()>.2){ // Fireballs shooting from Sun 
     var fireBall:FireBall=new FireBall; 
     fireBall.x=sun.x; 
     addChild(fireBall); 
     fireBalls.push(fireBall); 
    } 
    if (sun.x>stage.stageWidth){ // Sun hits right side of stage 
     sun.x=0; 
    } 
    if (sun.x<0){ // Sun hits left side of stage 
     sun.x=stage.stageWidth; 
    } 
} 

은 내가 무작위로 방향을 전환하는 태양을 얻을 수있는 타이머 이벤트 또는 무언가를 사용하고 싶지만 내가 아주, 제안 사항을 알아낼 수 없습니다 알아?

이는 SWF가 어떻게 생겼는지의 생각 (이 시뮬레이션에서의로드되지 모든 버킷은 무대에 있으며 이동 왼쪽과 현실에서 바로 onKeyDown에)과 같이

http://www.shareswf.com/game/24222/kaboom-sun-clone

답변

1

import flash.events.TimerEvent; 
import flash.utils.Timer; 
var bucket:Bucket=new Bucket 
var sun:Sun=new Sun 
var fireBalls:Array=new Array() 
var livesLeft:Array = new Array() 
var left:Boolean; 
var timer:Timer = new Timer(1000); // test change direction every second 


addChild(bucket) 
addChild(sun) 
sun.x=sun.width/2 
sun.y=50 
bucket.x=bucket.width/2 
bucket.y=stage.stageHeight-50 
bucket.speed=15 

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown) 

function onTimer(e:TimerEvent) { 
    left = (Math.random() > 0.5);// 50/50 chance of changing direction 
} 


timer.addEventListener(TimerEvent.TIMER, onTimer); 
timer.start(); 

function onKeyDown(event:KeyboardEvent){ 
    if (event.keyCode==37&&bucket.x>bucket.width/2){ // left arrow key 
     bucket.x=bucket.x-bucket.speed; 
    } 
    if (event.keyCode==39&&bucket.x<stage.stageWidth-bucket.width/2){ // right arrow key 
     bucket.x=bucket.x+bucket.speed; 
    } 
} 

stage.addEventListener(MouseEvent.MOUSE_MOVE,followBucket); 

function followBucket(event:MouseEvent):void { 
bucket.x=mouseX; 
} 

addEventListener(Event.ENTER_FRAME,onEnterFrame) 

function checkForCollisions(){ 

} 

function onEnterFrame(event:Event){ 
    checkForCollisions.call(); 
    if (left) { 
     sun.x = sun.x - 15; 
    }else{ 
     sun.x = sun.x + 15; 
    } 
    if (fireBalls.length>0&&fireBalls[0].y>stage.stageHeight-20){ // Fireballs exit stage 
     removeChild(fireBalls[0]); 
     fireBalls.shift(); 
    } 
    for (var j:int=0; j<fireBalls.length; j++){ 
     fireBalls[j].y=fireBalls[j].y+15; 
     if (fireBalls[j].y>stage.stageHeight-fireBall.width/2){ 
     } 
    } 
    if (Math.random()>.2){ // Fireballs shooting from Sun 
     var fireBall:FireBall=new FireBall; 
     fireBall.x=sun.x; 
     addChild(fireBall); 
     fireBalls.push(fireBall); 
    } 
    if (sun.x>stage.stageWidth){ // Sun hits right side of stage 
     sun.x=0; 
    } 
    if (sun.x<0){ // Sun hits left side of stage 
     sun.x=stage.stageWidth; 
    } 
} 
+0

이 기능이 훌륭하게 작동합니다. 이제 마지막 질문이 하나 있습니다. 어떻게 불 덩어리를 더 자주 떨어 뜨릴 수 있습니까? Math.random을 잘못 사용하고 있다고 가정합니다. 또는 다른 하나를 삭제하기 전에 어레이에서 1을 제거하기를 기다리는 중입니까? – Eratosthenes

+0

swf를 실행하면 null 참조 오류가 발생합니다. 나는 당신의 코드에서 다른 곳의 버그가 스크립트를 깨뜨리고 있다고 생각한다. – ricick

+0

나중에 null 참조가 fireBalls 배열이라고 생각합니다. 여기에 새로운 질문이 생겼습니다 : http://stackoverflow.com/questions/9866132/actionscript-dropping-multiple-objects-using-an-array – Eratosthenes

관련 문제