当前位置:  编程技术>移动开发
本页文章导读:
    ▪A* not a star in the space, it's on you hands        A*- not a star in the space, it's on you hands  A*游戏中的常用寻路算法,做游戏的孩子人手一个的轮子,be a gooleplayer。我也是这样的一个孩子,还想造很多轮子的孩子。   上周一位新同学问我A*.........
    ▪ Adapter的getView步骤详解        Adapter的getView方法详解BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter,我们经.........
    ▪ MSDN9.0的应用       MSDN9.0的使用装了VS2008后,顺便顺便装了MSDN9.0,但是开始不知道怎么打开。 后来发现在开始菜单中可以找到 对应的地址为 打开后 ......

[1]A* not a star in the space, it's on you hands
    来源: 互联网  发布时间: 2014-02-18
A*- not a star in the space, it's on you hands

  A*游戏中的常用寻路算法,做游戏的孩子人手一个的轮子,be a gooleplayer。我也是这样的一个孩子,还想造很多轮子的孩子。

  上周一位新同学问我A*,哈哈,整好去年细看了,给简单描画了一下。记得上次写A*,是zack给我们介绍了一个a*的优化算法,JPS(jump point search),我用这个算话改写优化了一下服务器的A*。效果不错,测试数据来看大概有100%的提升,服务器路径一般比较短吧,客户端那边要明显很多很多。

  话接上回说,给小同学讲解之后,表示不是很明白----我这表达太菜了,呜呜呜呜。好吧,直观一点,然后我用object c写了一个有过程掩饰的A*,想想自己的虚拟机,潸然泪下。objec c自己一直是纸上谈兵,这次也给做个小菜尝尝,xcode做ui那是真心的方便啊,quartz也很赞!!!然后,然后是一直键盘声,和vmware的卡咔咔咔,再然后,再然后就这玩意儿就可以跑了,嘿嘿!

闲话少说,上图!

     



github: https://github.com/garfieldchen/AStarFinding

参考资料:

       1.  http://www.policyalmanac.org/games/aStarTutorial.htm这是一篇好文 

2. http://snowyrock.wordpress.com/2007/07/15/a%E8%B7%AF%E5%BE%84%E5%AF%BB%E6%89%BE%E7%AE%97%E6%B3%95%E5%85%A5%E9%97%A8/这是上文的中中文版

       3. http://harablog.wordpress.com/2011/09/07/jump-point-search/  JPS 算法,G +  F + W 你懂的


这个object c版的a*只实现了,基本的A*,暂时没有实现我提到的JPS,但不久也就有了,代码可以随意使用,谢谢你看得起,哈哈。

使用说明 vm mac osx 10.7 + xocde 4.1 

step1 : create map

step2: create block 0 - n times

step3. mouse down on some none block tile,  drag to another tile, release, there's it, enjoy!

        color : orange - > open node , purge -> close node, green -> target position,  blue ===== oh, god , thanks, it's the way home.


    
[2] Adapter的getView步骤详解
    来源: 互联网  发布时间: 2014-02-18
Adapter的getView方法详解

BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter,我们经常使用的ListView 的adapter,即SimpleAdapter,是继承自BaseAdapter的,BaseAdapter是一个基类,没有实现绑定数据的功能,SimpleAdapter实现了基本控件的绑定,如TextView,Button,ImageView).已经为我们实现好了数据优化工作,这些适配器使用相同组件动态绑定数据的方式进行优化。为什么需要优化呢?因为如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?这不可能,因为内存有限制。实际上Android为你缓存了视图。Android中有个叫做Recycler的构件,下图是他的工作原理:


如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中。其实我的理解Recyler就是一个队列,用来存储不在屏幕范围内的item,如果item滚出屏幕范围,那么就入队,这里的滚出是完全滚出,即边界等也要完全滚出。如果新的item要滚进来,那么android系统的framework就会查看Recyler是否含有可以重复使用的iew,如果有那么就重新设置该iew 的数据源,然后显示,即出队。那么这么多的item其实只需要占用一定空间的内存,这个内存大小是多少呢?我的感觉是手机屏幕所包含的item的个数,再加上1,然后乘以每个item占用的内存。但是最后我发现是加上2.可能是为了使得缓存更大吧。。。。但是为什么加上2,大家应该理解,如果你不理解,那你就把滚动list的过程好好想一想。那个队列无非就是一个缓存罢了,因为我们的目的是通过那个缓存来重复使用那些已经创建的iew。

使用BaseAdapter的话需要重载四个方法,这些方法分别是getCount,getItem,getItemId,最后一个最重要的是getView,getView函数为什么重要呢?因为它是用来刷新它所在的ListView的。它在什么时候调用的呢?就是在每一次item从屏幕外滑进屏幕内的时候,或者程序刚开始的时候创建第一屏item的时候。看getView的api:

public abstract View getView (int position, View convertView, ViewGroup parent)
Since: API Level 1

Get a View that displays the data at the specified position in the data set. You can either create a View manually or inflate it from an XML layout file. When the View is inflated, the parent View (GridView, ListView...) will apply default layout parameters unless you use inflate(int, android.view.ViewGroup, boolean) to specify a root view and to prevent attachment to the root.

Parameters position The position of the item within the adapter's data set of the item whose view we want. convertView The old view to reuse, if possible. Note: You should check that this view is non-null and of an appropriate type before using. If it is not possible to convert this view to display the correct data, this method can create a new view. Heterogeneous lists can specify their number of view types, so that this View is always of the right type (see getViewTypeCount() and getItemViewType(int)). parent The parent that this view will eventually be attached to
Returns
  • A View corresponding to the data at the specified position.
position是指当前dataset的位置,通过getCount和getItem来使用。如果list向下滑动的话那么就是最低端的item的位置,如果是向上滑动的话那就是最上端的item的位置。conert是指可以重用的视图,即刚刚出队的视图。parent应该就是list。

为了让大家更好的理解这个函数,写了一个程序,请看:

public class MainActivity extends Activity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv = (ListView)findViewById(R.id.listview);
        ArrayList<String> listdata = new ArrayList<String>();
        for(int i=0;i<400;i++){
         listdata.add("Item" + i);
        }
        lv.setAdapter(new MyAdapter(this, listdata));
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    public class MyAdapter extends BaseAdapter{
     private ArrayList<String> listdata;
     private Context context;
    
     public MyAdapter(Context context,ArrayList<String> listdata){
     this.context = context;
     this.listdata = listdata;
     }
@Override
public int getCount() {
// TODO Auto-generated method stub
return listdata.size();
}


@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return listdata.get(arg0);
}


@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}


@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
Log.i("position",arg0+"");
TextView tmView;
String temstr;
if(arg1 == null){
TextView tm = new TextView(context);
tmView = tm;
tmView.setTag("old" + arg0);
tmView.setText(listdata.get(arg0));
}else {
tmView = (TextView)arg1;
tmView.setText(listdata.get(arg0) + "\t" + arg1.getTag());
}

return tmView;
}
    
    }

}

从log中大家好好观察相关的输出结果,便可以将其理解


    
[3] MSDN9.0的应用
    来源: 互联网  发布时间: 2014-02-18
MSDN9.0的使用

装了VS2008后,顺便顺便装了MSDN9.0,但是开始不知道怎么打开。

后来发现在开始菜单中可以找到


对应的地址为


打开后



    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3