2009年网游业大盘走势三格外猜想

       下看下何以管手势转成bitmap:

  编者按:中国底网络游戏行业大约经历了一定量独雅的光阴分水岭:早期市场紧缺产品,快速将到产品投放市场就能获得成功,因此等同批运营企业依赖打怪升级的“泡菜”游戏攫取了市场之极端充分份额。此后相同批判本土企业,根据中国用户之需要,将本土元素加入到网络游戏,尤其是加强了社交性,由此造就了平批判开发运营型公司之凸起。目前,中国的网络游戏市场仍然处在“井喷”的一世,市场在打100亿通往200亿甚至500亿初次涨,产品以及商业模式必然会延续形成,对于各个企业而言,把握方向,与时俱进将凡胜负的重中之重。本文作者王麒杰因本土从业者的角度,表达了他针对09年产业趋势的意。

       先看下main.xml:

  美国1929年生萧条时期,一个下岗的小伙子表明了同一舒缓强手棋,风靡了净美国,这虽是当代老方便翁类游戏的鼻祖爷。80年代末日本经济衰退,日本玩产业进来黄金一代,近几年日本经济复苏,游戏行业反而萎靡不前。90年间末亚洲金融危机,韩国政府意识失业大军都在家玩星际争霸,于是拼命拉发展网络游戏,有矣韩国今年产值数十亿美元的游艺产业。(可信度:80%)

      
图2界面凡于创建好之手势遭到匹配手势的界面,这里充分清楚看下,找的酷对
~嘿嘿~

  二、大型MMORPG日趋饱和期待新雅发

      
1、如何创造输入法手势、删除输入法手势、从SD卡中读取出手势文件!

  一、经济危机促进中华网游业大进步

  1. public void findGesture(Gesture gesture) {   
  2.     try {   
  3.         // 关于个别种方法创造模拟器的SDcard在【Android2D游戏支付的十】有详解  
  4.         if (Environment.getExternalStorageState() != null) {// 这个主意以探终端是否有sdcard!   
  5.             if (!file.exists()) {// 判定是否就有手势文件   
  6.                 tv.setText(“匹配手势失败,因为手势文件未有!!”);   
  7.             } else {//当存在这个文件的时候我们需要先去此手势然后拿新的手势放上   
  8.                 //读取已经存在的文件,得到文件中之所有手势   
  9.                 if (!gestureLib.load()) {//如果读取失败   
  10.                     tv.setText(“匹配手势失败,手势文件读取失败!”);   
  11.                 } else {//读取成功   
  12.                     List<Prediction> predictions = gestureLib.recognize(gesture);
      
  13.                     //recognize()的回到结果是一个prediction集合,   
  14.                     //包含了独具和gesture相匹配的结果。   
  15.                     //从手势库中询问匹配的始末,匹配的结果也许包括多只一般之结果,   
  16.                     if (!predictions.isEmpty()) {   
  17.                         Prediction prediction = predictions.get(0);   
  18.                         //prediction的score属性代表了跟手势的相似程度   
  19.                         //prediction的name代表手势对应的称号   
  20.                         //prediction的score属性代表了同gesture得一般程度(通常情况下非考虑score小于1底结果)。   
  21.                         if (prediction.score >= 1) {
      
  22.                             tv.setText(“当前公的手势在手势库中找到最好相似之手势:name =” + prediction.name);
      
  23.                         }   
  24.                     }   
  25.                 }   
  26.             }   
  27.         } else {   
  28.             tv.setText(“匹配手势失败,,当前模拟器没有SD卡 – -。”);   
  29.         }   
  30.     } catch (Exception e) {   
  31.         e.printStackTrace();   
  32.         tv.setText(“由于出现异常,匹配手势失败啦~”);   
  33.     }   
  34. }  

  2008年最好老的风味是MMORPG市场之竞争呈现饱和状态,后起之秀的竞争门槛非常高,难以再现《征途》当年之雄风,短短时间突破百万级在线成为新的十分黑马,这个现状与10年前的日本市面似乎已相识,少数几慢慢悠悠RPG大发雄踞市场,新的RPG层出不穷,但却难撼动老牌大作的位置。世事不绝对,其实玩家还是挺期待涌现过五星级水准的MMORPG新大作,只是现在之MMPRPG同质化太严重,玩家不同档次呈现审美疲劳,《天龙八部》和《魔域》的匠心独运,或许能于咱赢得有唤起:”MMORPG不要单独见面山寨和抄袭,请君有丹心之,认真用心的开片翻新及突破,我们会意识另外一切开上。”

      
其实错了,一开始自耶这么想,但是发现,不管而设置的画类型是单纯的还是差不多画当您手指离开屏幕,不管而手上是第几画,Android都见面失掉响应这就函数,so~
我于这边调用手势Gesture类中之getStrokesCount()函数,这个函数会记录在严密时间外而绘制手势的笔划数,那么根据这个函数我们就算足以解决手指离开屏幕总为响应的问题了,因为纯粹笔划类型永远是价值不见面高于1!

  席卷欧美亚的金融危机已带动阵阵寒意,国内部分出口型企业已开始裁员过冬,一些十分商厦不胜裁员的传闻持续,身边有恋人说她们之店堂也有考虑裁员,经济危机对社会的私房心理影响比较特别,对网游行业来说,或许反而是一个吓信息。从韩国、日本、美国底更来拘禁,凡是经济危机时期,都是打行业之迅速发展期。

       先出档次截图,简单说下其效果及操作:

  对于不久一年岁月冒出几百放缓网页游戏鱼上混杂的商海现状,本文不做最好多评论,我们先来对比一下微软跟谷歌公司,微软几乎拥有的制品还有客户端,而谷歌几乎有的活都是面向网络,不需要客户端,两贱商家即几年之向上高下可见,这个中的味道特别深。网络时代没有客户端的制品竞争力会更大,把握住这大趋势,无向

图片 1

  三、网页游戏异军突起渐入佳境

       onGestureStarted   和  onGestureEnded 
:手势开始和手势结束之监听函数。

  其实开网游和肯德基卖汉堡其实远非啥区别,别拿温馨扣的无限胜科技,到肯德基吃一个汉堡,或许就是亮这个世界的最高商业法则:人们永远爱吃汉堡,只是想会微微换换口味,鸡腿板烧一下即便是初类型板烧鸡腿堡、蛋挞加上樱桃又是新品类,这就是创新之真正意义,如果你把鸡腿换成火腿以为就是是翻新,必深。如果你管蛋挞换成面包,还是必死。(可信度:70%)

       2、当输入法手势创建后,如何来配合有我们的自定义手势!

  DoNews 10月24日评论(文/王麒杰)

   
 进行软件开发时,通常咱们都好用于新本子的工具,但此我何以采取低版本的SDK来开发Android游戏呢?这里介绍下由:

  1. /**  
  2.  *@author Himi  
  3.  *@输入法手势识别  
  4.  *@注意: android.gesture这个看似以api-4(SDK1.6)才开支持的!  
  5.  *@提醒:默认存到SD卡中,所以别忘在AndroidMainfest.xml加上SD卡读写权限! 
  6.  */  
  7. public class MainActivity extends Activity {   
  8.     private GestureOverlayView gov;// 创建一个手写绘图区   
  9.     private Gesture gesture;// 手写实例   
  10.     private GestureLibrary gestureLib;//创建一个手势仓库   
  11.     private TextView tv;   
  12.     private EditText et;   
  13.     private String path;//手势文件路径   
  14.     private File file;//   
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {
      
  17.         super.onCreate(savedInstanceState);
      
  18.         this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
      
  19.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);   
  20.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);
      
  21.         setContentView(R.layout.main);   
  22.         tv = (TextView) findViewById(R.id.himi_tv);   
  23.         et = (EditText) findViewById(R.id.himi_edit);   
  24.         gov = (GestureOverlayView) findViewById(R.id.himi_gesture);
      
  25.         gov.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);//设置笔划类型   
  26.         // GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE 设置支持多笔划   
  27.         // GestureOverlayView.GESTURE_STROKE_TYPE_SINGLE 仅支持单一笔划   
  28.         path = new File(Environment.getExternalStorageDirectory(), “gestures”).getAbsolutePath();   
  29.         //得到默认路径和文件名/sdcard/gestures   
  30.         file = new File(path);//实例gestures的文本对象   
  31.         gestureLib = GestureLibraries.fromFile(path);//实例手势仓库   
  32.         gov.addOnGestureListener(new OnGestureListener() { // 这里是绑定手写绘图区   
  33.                     @Override  
  34.                     // 以下方式是你碰巧起画手势的时节触发   
  35.                     public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
      
  36.                         tv.setText(“请您于紧凑的时空内为此半画划来完成一个手势!西西~”);
      
  37.                     }   
  38.                     @Override  
  39.                     // 以下方式是当手势完整形成的下触发   
  40.                     public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
      
  41.                         gesture = overlay.getGesture();// 从绘图区取出形成的手势   
  42.                         if (gesture.getStrokesCount() == 2) {//我判定当用户之所以了有限笔画划   
  43.                             //(强调:如果同开始设置手势笔画类型是十足笔画,那若这边一直抱的无非是1!)   
  44.                             if (event.getAction() == MotionEvent.ACTION_UP) {//判定第两笔画离开屏幕   
  45.                                 //if(gesture.getLength()==100){}//这里是判定长度达到100如素   
  46.                                 if (et.getText().toString().equals(“”)) {   
  47.                                     tv.setText(“由于您没有输入手势名称,so~保存失败啦~”);   
  48.                                 } else {
      
  49.                                     tv.setText(“正在保存手势…”);   
  50.                                     addGesture(et.getText().toString(), gesture);//我自己写的增长手势函数   
  51.                                 }   
  52.                             }   
  53.                         } else {   
  54.                             tv.setText(“请而在严密的工夫内之所以鲜笔划来形成一个手势!西西~”);
      
  55.                         }   
  56.                     }   
  57.                     @Override  
  58.                     public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
      
  59.                     }   
  60.                     @Override  
  61.                     public void onGesture(GestureOverlayView overlay, MotionEvent event) {
      
  62.                     }   
  63.                 });   
  64.         //—-这里是于程序启动的时刻进行遍历所有手势!——   
  65.         if (!gestureLib.load()) {   
  66.             tv.setText(“Himi提示:手势超过9只自我开了抹所有手势的操作,为了界面整洁一些!”  
  67.                     + ” 输入法手势练习~(*^__^*)~ 嘻嘻!/n操作介绍:(画手势我设置必画两笔画划才行哦~)/n1.” +
      
  68.                             “添加手势:先EditText中输入名称,然后于屏幕上绘生手势!/n2.匹配手势:”  
  69.                     + “在EditText输入/”himi/”,然后输入手势即可! “);   
  70.         } else {   
  71.             Set<String> set = gestureLib.getGestureEntries();//取出所有手势   
  72.             Object ob[] = set.toArray();   
  73.             loadAllGesture(set, ob);   
  74.         }   
  75.     }   
  76. }  

      
OK,那么既然使用手势既然能开展解锁等操作,那么我们耍支付被,更是可以在这无异于亮点了,比如在游戏受自己画个周执行换背景操作,画个X表示退出游戏之类,等等、哈哈
是勿是感觉十分有趣了?好的,下面就是起进入讲解!

  1. public void addMyGesture(String name, Gesture gesture) {
      
  2.         try {   
  3.             if (name.equals(“himi”)) {   
  4.                 findGesture(gesture);   
  5.             } else {   
  6.                 // 关于个别种方式创造模拟器的SDcard在【Android2D游戏支付的十】有详解   
  7.                 if (Environment.getExternalStorageState() != null) {// 这个法子在试终端是否出sdcard!   
  8.                     if (!file.exists()) {// 判定是否已经存在手势文件   
  9.                         // 不有文件的早晚咱们失去一直把咱的手势文件存入   
  10.                         gestureLib.addGesture(name, gesture);   
  11.                         if (gestureLib.save()) {////保存到文件被   
  12.                             gov.clear(true);//清除笔画   
  13.                             // 注意保存之门道默认是/sdcard/gesture ,so~别忘记AndroidMainfest.xml加上读写权限!   
  14.                             // 这里抱怨一下,咳咳、其实昨天即令应该产生当下篇博文的,就是以此处连十分,今天精心看了   
  15.                             // 才发觉不是未曾写权限,而是自己虽以AndroidMainfest.xml中形容了权,但是写错了位置..哭很!   
  16.                             tv.setText(“保存手势成功!因为无存手势文件,” + “所以首先不行保存手势成功会晤默认先创造” +   
  17.                                     “建了一个手势文件!然后用手势保存至文件中.”);
      
  18.                             et.setText(“”);
      
  19.                             gestureToImage(gesture);   
  20.                         } else {   
  21.                             tv.setText(“保存手势失败!”);   
  22.                         }   
  23.                     } else {//当存在这个文件之时段咱们得事先去此手势然后将新的手势放上   
  24.                         //读取已经是的公文,得到文件被的备手势   
  25.                         if (!gestureLib.load()) {//如果读取失败   
  26.                             tv.setText(“手势文件读取失败!”);   
  27.                         } else {//读取成功   
  28.                             Set<String> set = gestureLib.getGestureEntries();//取出所有手势   
  29.                             Object ob[] = set.toArray();   
  30.                             boolean isHavedGesture = false;   
  31.                             for (int i = 0; i < ob.length; i++) {//这里是遍历所有手势的name   
  32.                                 if (((String) ob[i]).equals(name)) {//和我们新添的手势name做比   
  33.                                     isHavedGesture = true;   
  34.                                 }   
  35.                             }   
  36.                             if (isHavedGesture) {//如果此变量为true说明有雷同name的手势   
  37. //—-备注1——————-//gestureLib.removeGesture(name, gesture);//删除与时名一样之手势   
  38. /*—-备注2—————–*/gestureLib.removeEntry(name);
      
  39.                                 gestureLib.addGesture(name, gesture);
      
  40.                             } else {   
  41.                                 gestureLib.addGesture(name, gesture);
      
  42.                             }   
  43.                             if (gestureLib.save()) {   
  44.                                 gov.clear(true);//清除笔画   
  45.                                 gestureToImage(gesture);   
  46.                                 tv.setText(“保存手势成功!当前具有手势一共发:” + ob.length + “个”);   
  47.                                 et.setText(“”);
      
  48.                             } else {   
  49.                                 tv.setText(“保存手势失败!”);   
  50.                             }   
  51.                             ////——- –以下代码是当手势超过9只就合清空 操作——–   
  52.                             if (ob.length > 9) {
      
  53.                                 for (int i = 0; i < ob.length; i++) {//这里是遍历删除手势   
  54.                                     gestureLib.removeEntry((String) ob[i]);
      
  55.                                 }   
  56.                                 gestureLib.save();   
  57.                                 if (MySurfaceView.vec_bmp != null) {   
  58.                                     MySurfaceView.vec_bmp.removeAllElements();//删除放置手势图的器皿   
  59.                                 }   
  60.                                 tv.setText(“手势超过9个,已全部清空!”);   
  61.                                 et.setText(“”);
      
  62.                             }   
  63.                             ob = null;
      
  64.                             set = null;
      
  65.                         }   
  66.                     }   
  67.                 } else {   
  68.                     tv.setText(“当前模拟器没有SD卡 – -。”);   
  69.                 }   
  70.             }   
  71.         } catch (Exception e) {   
  72.             tv.setText(“操作非常!”);   
  73.         }   
  74.     }  

      
在齐平等首被本身受大家介绍了触摸屏手势操作,但是这种触屏手势的操作比较起局限性;比如我们还掌握Android可以下手势来解锁,类似九宫格形式的,通过从定义之一个单笔画手势可以解开屏幕锁,还好起定义笔画手势来启动一个运用等,那么这种所谓的笔手势其实就是今自己若叫大家教的输入法手势识别技术!这种手势是咱们得以友善来自定义,而无像之前的触屏手势操作只是利用Android
对一些触屏动作的包装罢了。下面上几布置手机打定义笔划手势解锁的之截图:

       这就是说我们下面就来拘禁怎么创建一个手势:

       所谓单一笔划笔划就是同等笔画划画有一个手势,从您手指点屏幕开始交公去屏幕笔画就见面立即形成一个手势!一气呵成!

Java代码

       4、嘿是画类型?  
输入法手势操作着,笔划类型有三三两两种;一种是:单一笔划,另外一栽是:多笔

       下面我们来熟习两单近乎和几单概念:

       备注1:因gestureLib保存之手势是只HashMap,
key=手势的讳,value=手势,所以gestureLib.removeGesture(name,
gesture);这种去方式仅是删除了手势,该手势名字还保存于hashmap中,下次还有一样的name手势存入的时刻Hashmap就直盖本章了。所以据悉Hashmap的特性,我们可免进行删除操作,可以一直gestureLib.addGesture(name,
gesture);因为一旦出现一样之手势名字的手势,Hashmap就见面因key(手势的名)直接盖其条款的value(手势)滴~

Java代码

      
总结:游戏支付被,如果您打不需重新胜似的API的支持,那么推荐基于SDK
1.5以及1.6来支付!

  1. public void loadAllGesture(Set<String> set, Object ob[]) { //遍历所有的手势   
  2.         if (gestureLib.load()) {//读取最新的手势文件   
  3.             set = gestureLib.getGestureEntries();//取出所有手势   
  4.             ob = set.toArray();   
  5.             for (int i = 0; i < ob.length; i++) {   
  6.                 //把手势转成Bitmap   
  7.                 gestureToImage(gestureLib.getGestures((String) ob[i]).get(0));   
  8.                 //这里是把咱每个手势的讳呢保留下去   
  9.                 MySurfaceView.vec_string.addElement((String) ob[i]);
      
  10.             }   
  11.         }   
  12.     }  

       首先本篇主要学习半点:

  1. <?xml version=”1.0″ encoding=”utf-8″?>  
  2. <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”  
  3.     android:orientation=”vertical” android:layout_width=”fill_parent”  
  4.     android:layout_height=”fill_parent”>  
  5.     <TextView android:id=”@+id/himi_tv” android:layout_width=”fill_parent”  
  6.         android:layout_height=”wrap_content” android:text=”@string/hello”  
  7.         android:textSize=”15sp” android:textColor=”#FFFFFF00″ />  
  8.     <EditText android:id=”@+id/himi_edit” android:layout_width=”fill_parent”  
  9.         android:layout_height=”wrap_content” />  
  10.     <RelativeLayout android:layout_width=”fill_parent”  
  11.         android:layout_height=”wrap_content” android:layout_weight=”1″>  
  12.         <com.himi.MySurfaceView android:id=”@+id/view3d”  
  13.             android:layout_width=”fill_parent” android:layout_height=”fill_parent” />  
  14.         <android.gesture.GestureOverlayView  
  15.             android:id=”@+id/himi_gesture” android:layout_width=”fill_parent”  
  16.             android:layout_height=”fill_parent” android:layout_weight=”1.0″/>  
  17.     </RelativeLayout>  
  18. </LinearLayout>  

      
这个就算是MainActivity主要代码了,其中添加手势、匹配手势、遍历手势、将手势转成为图这些自都单身写成了函数,这样让各位童鞋更鲜明思路有。

       2、使用低版本进行耍支付这样能够兼职更多之机型,获取更多的用户!

      
那么最终为各位童鞋说一下,其实输入法手势操作非常是合游戏受行使,不管是触摸屏手势操作还是今天说的输入法手势操作而加到游戏受那都是一定赞的!

       备注2:这里为是同等种去手势的办法,但是这种措施跟备注1的两样,这里是用Hashmap中之条文删除,也就是说key和value都叫删除!

      
从上述代码中我们看出在创立手势之前,手写绘图区(GestureOverlayView)肯定先让创造出来,然后我们虽好以该区域被展开笔划绘画手势了,当然写手势前,我们呢欲设置了笔类型,也尽管是自我同一开始吃大家介绍的,其后最着重之虽是手写绘图区的手势监听器绑定,增加OnGestureListener这个监听器重写了季单函数,这里最要害的尽管少于只函数:

      
而多笔则是足以在得紧凑时间外随意几笔划都不过,然后超过此紧凑时间晚虽会形成一个手势!

      
图1界面被分成3块,从上到下依次是:TextView ,EditText,SurfaceView;然后于SurfaceView后面还有一个挂全屏的GestureOverlayView!

Java代码

       脚最后来探望手势的配合:

Java代码

       3、画是啊,字体笔画? 
是的,其实就是是和我们写字的画一个概念!

       而 if (event.getAction() == MotionEvent.ACTION_UP)
{}写这只是吃大家演示第二独参数按键动作该怎么用。

      
如果文件不存就是先直接长到手势到手势仓库着,然后手势仓调用gestureLib.save()才总算把手势存到SD卡的手势文件被。

       如果您设置笔划类型是多笔划类型的,那么出色状态下,应该是在同等截紧凑时间外,不管而采取了几笔画划来绘制手势,系统都应当以认清你以必为期不远时间内无还开展笔划的早晚才应创建手势,并且系统响应者函数;

XML/HTML代码

       1、Android
SDK 属于向下兼容!那么小版本可以运作的,高版本基本上更没有问题!(当然每次SDK的翻新也会见带动新力量,或者涂改了有的原来的BUG等等,那么实际上对于游戏支付以来,如果您的戏受未欲重新胜的SDK版本的支撑情况下,完全无肯定去追求最新的SDK!)

       下面看MainActivity.java:

       2、什么是 GestureLibrary ?  
这个类似是对手势进行封存、删除等操作的,一个存放手势的粗仓库!

      
文件在的语还要去看清是否文件中隐含了千篇一律名字的手势;当然这里可以免判断是否发一致手势名在,然后进行去操作!其实为可是免删,直接抬高进去时新建的手势;原因看了脚的备考说明就是明白了;

       1、什么是 GestureOverlayView ? 
简单点说其实就算是一个手写绘图区;

      
这里吧都颇好理解,套路看似事先File文件存储的套路,先判断SD是否有,然后是文件是否有:

  1. public void gestureToImage(Gesture ges) {//将手势转换成Bitmap   
  2.      //把手势转成为图,存到我们SurfaceView中定义之Image容器中,然后都打出~  
  3.      if (MySurfaceView.vec_bmp != null) {   
  4.          MySurfaceView.vec_bmp.addElement(ges.toBitmap(100, 100, 12, Color.GREEN));   
  5.      }   
  6. }  

      
尤其是手势结束监听者函数尤为重要,在中间自设置好几独规范语句,这么几个条件一方面是为大家探听Gesture中部分比较重要常用之计,另一方面自己要提拔各位童鞋:

      
xml中登记的出咱由定义之surfaceview,对之不太熟悉得去看下Android游戏开发6,不多讲了。关于GestureOverlayView这里也只是简短的定义了宽高,还有一些要之性设置以代码中安装了,当然xml也得以设置的。

图片 2

Java代码

       下面是怎么样遍历手势:

       3、大家都理解Android SDK
每次版本的换代,底层代码也会见再度健全和优化了!比如我们合作社之网游Android版在G2(SDK1.5)上跑起有点有若干卡,而以自我之无绳电话机及(SDK2.2)运行起来顺口的没说的~各种舒坦~~但是这样为会见带有弊端,比如我们友好戏要上来就就此强版本SDK进行开,那么对性、内存达到究竟什么样,我们且不见面杀易之看到其力量,如果我们所以没有版本的SDK则会受咱们有目共睹的感受及性究竟什么~你想如果你的游艺以1.5
,1.6臻走起十分流利,那在更胜版本的SDK机器及尤为没说的呐~

发表评论

电子邮件地址不会被公开。 必填项已用*标注