dis_oo

flash\flex\AS\Unity3d\JS\HTML5\CSS3\AJAX
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于stage的用法

Posted on 2011-07-15 13:08  FLASH春哥  阅读(1983)  评论(0)    收藏  举报

今天在写一个ipad游时,出现了一个错误,可能以前是做flash的原因,对这个方法的应用不是很多,所以不明白,其实很简单:

我写了一个建能量条的一个类JumpPower.as在里面写了一个keyboardEvent的事件侦听,但是要在主程序上控制键盘事件,那只能写上stage.addEventListener(KeyboardEvent.KEY_DOWN,ondown);然后我在主程序类上实例化了一个能量条,然后运行起来,悲剧了报错:

结果一个是stage为null然后在JumpPower.as中加上一句.this.addEventLitener(Event.ADD_TO_STAGE,on);在on函数里面再写上stage.addEventListener(KeyboardEvent.KEY_DOWN,ondown);然后运行OK

主类:

package
{
	import com.utils.game.*;
	
	import flash.display.Sprite;
	[SWF(width=914,height=700,frameRate=60)]
	
	public class Skater extends Sprite
	{
		private var A:JumpPower;
		public function Skater()
		{
			stage.focus=stage;
	   		A=new JumpPower();
			A.x=600;
			A.y=10;
			this.addChild(A);
			A.KeyStues;
			trace(A.KeyStues);
		}
	}
}
JumpPower.as
package com.utils.game
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	public class JumpPower extends MovieClip
	{
		private var JumpPowerDemo:PowerArea;
		private var LinePos:Number;
		public  var KeyStues:String;
		public function JumpPower()
		{
			init();
		}
		private function init():void
		{
			JumpPowerDemo=new PowerArea();
			this.addChild(JumpPowerDemo);
			JumpPowerDemo.Power.PowerLine.width=0;
			LinePos=0;
			KeyStues="keyup";
			trace(KeyStues);
                                      if(stage==null){			
			   this.addEventListener(Event.ADDED_TO_STAGE,ontostage);
		             }//关键点
		
		   JumpPowerDemo.Power.addEventListener(Event.ENTER_FRAME,onchange);
			
		}
		private function ontostage(e:Event):void
		{
			stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
			stage.addEventListener(KeyboardEvent.KEY_UP,onKeyUp);
		}
		private function onKeyDown(e:KeyboardEvent):void
		{
			
			if(e.keyCode==32){
				KeyStues="keydown";
				trace("go");
				
				
				}
		}
		private function onKeyUp(e:KeyboardEvent):void
		{
			KeyStues="keyup";
		}
		private function onchange(e:Event):void
		{
			 if(KeyStues=="keydown"){
				e.currentTarget.PowerLine.width+=4;
				if(e.currentTarget.PowerLine.width>=260){
					e.currentTarget.PowerLine.width=260;
				}
				
			 }else if(KeyStues=="keyup"){
				 e.currentTarget.PowerLine.width-=4;
				 if(e.currentTarget.PowerLine.width<=0){
					 e.currentTarget.PowerLine.width=0;
				 }
			 }
				 
		}
	}
}