虚拟游戏操纵杆

12 篇文章 0 订阅
9 篇文章 0 订阅

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;
}

 
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值