虚拟游戏操纵杆

20121126

       为了内存,我不要NPC

是的,总算是把游戏成功放置于ipad上了,

但是,游戏运行速度是那么的不如意,卡爆了!

足足有400多M呢,特别是资源,大占据了内存空间,

So,我试着先不加载怪物上去,额,代码不熟悉就问主程了,

发现他说的毫无用处,什么不处理服务那边发来的消息就行了,

那只是不显示而已,怪物数据还是有啊,可是他那么的肯定,如果不处理是觉得没怪物数据的。

好了,不纠结,这本不是我的问题。

 

20121127

        为了内存,美工将地图优化

这一天,我可以说是烦躁了,什么什么嘛,

昨天还能生成ipa,今天又报内存溢出错误了,

我开始怀疑地图,于是将bin复原,结果一样。

唉,又新建项目,又配置,时间总是花在这种事情上!

总算是成功了,果然,地图改了,给力多了,生成只有350多M了。

运行速度也快了。

 

20121128

终于,flash发布ipa版本总算告一段落了。

现在开始接手pad版本任务需求了。

总算开始接触代码了,这是我所梦寐的呢。

第一个需求就是给游戏加一个虚拟的游戏操纵杆,

好了,今天就看代码了。

 

20121129

嗯,游戏操纵杆基本逻辑理清,

打算叫主程序那边写个接口函数的,

按照我给他的弧度计算玩家移动。

我只能说彻底无语,听不明白我意思,

还是我没听明白他的意思?他一定要我考虑人物旋转,

我现在都讲不清楚了!还是给大家看看我写的测试版吧:

package 
{
 import flash.desktop.NativeApplication;
 import flash.events.Event;
 import flash.display.Sprite;
 import flash.display.StageAlign;
 import flash.display.StageScaleMode;
 import flash.ui.Multitouch;
 import flash.ui.MultitouchInputMode;
    import flash.events.TouchEvent;
 import flash.events.MouseEvent;
 import flash.text.TextField
 import flash.utils.Timer;  
   import flash.events.TimerEvent;   /**
  * ...
  * @author ...
  */
 public class Main extends Sprite 
 {
  private var myTextField:TextField ;
  private var mySpriteNpc:Sprite ;
  private var mySprite:Sprite ;
  private var mySpriteBg:Sprite;
  private var touchMoveID:int = 0; 
  private var IsDown:Boolean = false;
  private var IsIn:Boolean = false;
  private var timer:Timer  public function Main():void 
  {
   stage.scaleMode = StageScaleMode.NO_SCALE;
   stage.align = StageAlign.TOP_LEFT;
 
   Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
   
   mySpriteBg = new Sprite();
   mySpriteBg.graphics.beginFill(0x336600); 
   mySpriteBg.graphics.drawCircle(150, 150, 150);
   addChild(mySpriteBg); 
   
   
   mySprite = new Sprite(); 
   mySprite.graphics.beginFill(0x33ff99); 
   mySprite.graphics.drawCircle(150, 150, 25);
   addChild(mySprite);
   
   mySpriteNpc = new Sprite(); 
   mySpriteNpc.graphics.beginFill(0xff6699); 
   mySpriteNpc.graphics.drawCircle(400, 400, 25);
   addChild(mySpriteNpc);
   
   myTextField = new TextField(); 
   addChild(myTextField); 
   myTextField.width = 200; 
   myTextField.height = 20; 
   
   timer=new Timer(50);  
            //开始记时  
            timer.start();     //mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); 
   mySprite.addEventListener(MouseEvent.MOUSE_DOWN, onTouchBegin); 
   timer.addEventListener(TimerEvent.TIMER,UpdateShow);  
   
  }
       private function onTouchBegin(event:MouseEvent):void
  { 
   myTextField.text="触摸开始";
   //stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); 
   //stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); 
   stage.addEventListener(MouseEvent.MOUSE_MOVE, onTouchMove); 
   stage.addEventListener(MouseEvent.MOUSE_UP, onTouchEnd); 
   IsDown = true;
   
  }   private function onTouchMove(event:MouseEvent)
  { 
   var temp1 : Number = Math.pow((mySprite.x - mySpriteBg.x), 2);
   var temp2 : Number = Math.pow((mySprite.y - mySpriteBg.y), 2);
   var radius : Number = Math.sqrt(temp1 + temp2);
   var rate : Number = get_rocker_dir();
   if (radius < 150)
   {
    //myTextField.text = "触摸移动中";
    trace(rate);
    mySprite.x = event.stageX-150; 
    mySprite.y = event.stageY - 150;
    IsIn = true;
   }
   
   if(radius > 150)
   {
    mySprite.x = Math.cos(rate) * 150;
    mySprite.y = Math.sin(rate) * 150;
    
    // myTextField.text="超出范围";
   }  } 
  
   private function UpdateShow(evt:TimerEvent):void 
   {  
    if (!IsIn || !IsDown)
    return;
   var rate : Number = GetRockerDir();
   
   var temp1 : Number = Math.pow((mySprite.x - mySpriteBg.x), 2);
   var temp2 : Number = Math.pow((mySprite.y - mySpriteBg.y), 2);
   var radius : Number = Math.sqrt(temp1 + temp2);
  
   mySpriteNpc.x += Math.cos(rate) * radius*0.09;
   mySpriteNpc.y += Math.sin(rate) * radius*0.09;
   evt.updateAfterEvent();   
    } 
    
  private function onTouchEnd(event:MouseEvent):void
  { 
   IsIn = IsDown = false;
   myTextField.text="触摸结束";
   //stage.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); 
   //stage.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd); 
   stage.removeEventListener(MouseEvent.MOUSE_MOVE, onTouchMove); 
   stage.removeEventListener(MouseEvent.MOUSE_UP, onTouchEnd); 
   mySprite.x =  mySpriteBg.x;
   mySprite.y =  mySpriteBg.y;
  }
  public function   GetRockerDir() : Number
  {
   return Math.atan2(mySprite.y - mySpriteBg.y, mySprite.x - mySpriteBg.x);
  }   
 }

}


 

希望大家可以不腻/吝赐教,谢谢。
 
20121230
昨天的主程序说的什么要考虑旋转问题,今天无声中不了了之。因为脑残才会想到那吧,但是我确实陷进去了一会,
确实没写过3D,在3D主程序面前,我还是谦虚的回到了自己的工位,去想、考虑什么旋转问题,从更多的同学口中肯定了:这不过是脑残的想法!
好了,就这样。因为还是相信他们的能力,我选择了,我的弧度返回给他们,希望他们可以加一个接口函数,但事实证明:他们远远没有自己想的那么有能力,这么一个接口函数都加不了,硬是要距离、目标点、玩家移动帧数、、、、、好了,靠他们还不如自己写个了,那么我决定就写个鸡肋的函数了(其实函数写来并不鸡肋,但是真正用时,你才会知道....和某人一样SB): 
private function GetDesPos():Vector3D
{
   var Rate : Number = GetRockerDir();
   var NpcPos : Vector3D = gc_localHero.INSTANCE.position;
   var DesPos : Vector3D = new Vector3D();
   DesPos.x = NpcPos.x + Math.cos(Rate);
   DesPos.z = NpcPos.z - Math.sin(Rate);
   DesPos.y = 0;
   return DesPos;
}

 
 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值