当前位置:  编程技术>移动开发
本页文章导读:
    ▪解析apk资料的图标等内容        解析apk文件的图标等内容 import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.ArrayList; import eric.test.R; import android.app.Activity; import android.content.Context; import android.content.pm.Appli.........
    ▪ 直角瓦片map        直角瓦片地图 第10章 瓦片地图 在瓦片地图游戏中,图形由一些排列整齐的“瓦片”组成。将这些瓦片房子放在一个网格中,可以使我们创建逼真的游戏世界。瓦片地图的概念非常具有吸.........
    ▪ 斜角瓦片map       斜角瓦片地图 第11章 斜角瓦片地图 斜角瓦片地图使用2D图形来获得3D效果。由于它汲取了两者的优势,因此受到了广泛使用。11.1 设计斜角瓦片地图图形 斜角瓦片地图使用轴测投影(axonome.........

[1]解析apk资料的图标等内容
    来源: 互联网  发布时间: 2014-02-18
解析apk文件的图标等内容

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;

import eric.test.R;

import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class main extends Activity {
	private ImageView img;
	private String archiveFilePath =Environment.getExternalStorageDirectory() + "/"+ "lindong/生活百事通之营养.apk";
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		img = (ImageView)findViewById(R.id.img);
		Drawable icon = getUninstallAPKIcon(this, archiveFilePath);
		img.setBackgroundDrawable(icon);
	}
	public static Resources getResources(Context context , String apkPath) throws Exception {  
        String PATH_AssetManager = "android.content.res.AssetManager";        
        Class assetMagCls = Class.forName(PATH_AssetManager);    
        Constructor assetMagCt = assetMagCls.getConstructor((Class[]) null);    
        Object assetMag = assetMagCt.newInstance((Object[]) null);    
        Class[] typeArgs = new Class[1];    
        typeArgs[0] = String.class;    
        Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod("addAssetPath",    
                typeArgs);    
        Object[] valueArgs = new Object[1];    
        valueArgs[0] = apkPath;    
        assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);  
        Resources res = context.getResources();    
        typeArgs = new Class[3];    
        typeArgs[0] = assetMag.getClass();    
        typeArgs[1] = res.getDisplayMetrics().getClass();    
        typeArgs[2] = res.getConfiguration().getClass();    
        Constructor resCt = Resources.class.getConstructor(typeArgs);    
        valueArgs = new Object[3];    
        valueArgs[0] = assetMag;    
        valueArgs[1] = res.getDisplayMetrics();    
        valueArgs[2] = res.getConfiguration();    
        res = (Resources) resCt.newInstance(valueArgs);          
        return res;  
    }  
	
	public static Drawable getUninstallAPKIcon(Context context,String apkPath) {    
	    PackageManager pm = context.getPackageManager();    
	        PackageInfo info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES);          
	        Resources res = null;  
	        try {  
	        res = getResources(context,apkPath);  
	    } catch (Exception e) {  
	        return null;  
	    }  
	    if(info != null){  
	        ApplicationInfo appInfo = info.applicationInfo;  
	        return res.getDrawable(appInfo.icon);   
	    }  
	          
	    return null;          
	    } 
	

}

 

 其实关键还是获取可以获取apk内容的Resource对象

 

转自:http://blog.csdn.net/sky181772733/article/details/7220401


    
[2] 直角瓦片map
    来源: 互联网  发布时间: 2014-02-18
直角瓦片地图
第10章 瓦片地图
在瓦片地图游戏中,图形由一些排列整齐的“瓦片”组成。将这些瓦片房子放在一个网格中,可以使我们创建逼真的游戏世界。瓦片地图的概念非常具有吸引力,因为比起用一张贴图来绘制整个世界,它更省内存,而且还可以有许多不同的组合。
直角瓦片地图由正方形或长方形瓦片构成,并以一种自顶向下(top-down)的方式展现世界。
10.1 瓦片地图简介
瓦片地图是由单个瓦片组成的2D游戏世界。使用少量尺寸相同的图像就可以创建出很大的世界地图,这意味着瓦片地图擅长为大地图节省内存。
瓦片地图的编辑工作通常通过编辑器来完成,cocos2d直接支持一个名为Tiled(Qt)的地图编辑器。Tiled是免费的、开源的,能够比那几直角瓦片地图和多层的斜角瓦片地图。Tiled还能够添加触发区域和对象,以及定义瓦片的属性以在代码中确定瓦片的类型。
注意:
Qt是指诺基亚的Qt框架,Tiled就是用它构建而成的。因为还有一个已经不用了的Java版Tiled,所以有必要写成Tiled(Qt)来区分一下。
斜角瓦片地图是通过将瓦片图像画成钻石形状(菱形),并将距离观察者近的瓦片覆盖在距离观察者远的瓦片之上来获得这种深度感。
10.2 使用Zwoptex处理图像
对于Tiled地图编辑器而言,瓦片的位置是很重要的。因为Tiled通过位置和偏移来引用瓦片集中的单个瓦片。这意味着如果纹理图册中的瓦片位置发送改变,Tiled中使用这个瓦片集贴图的瓦片地图会完全变样。
10.3 Tiled地图编辑器
Tiled地图编辑器广泛用于创建可在cocos2d中使用的瓦片地图。它创建的TMX文件可被cocos2d游戏引擎原生支持。Tiled地图编辑器是免费的,可以从它的首页www.mapeditor.org上下载。
10.3.1 创建新的瓦片地图
Tiled同时支持直角瓦片地图和斜角瓦片地图。地图的大小是瓦片数而不是像素。
瓦片的宽度和高度是瓦片集中每张瓦片的尺寸。Margin和Spacing指定了瓦片与图像边界的距离以及瓦片与瓦片间的距离。
如果用的是Zwoptex创建的瓦片集贴图,就必须在Margin和Spacing中输入Zwoptex里设定的像素填充值。Zwoptex默认使用两个像素作为填充值。
加载新的瓦片集图像时,要确保瓦片集图像已经在项目的资源文件夹中,还要保证将瓦片地图的TMX文件保存到与所使用瓦片集图像相同的文件夹中,否则cocos2d可能无法加载瓦片集图像——在试图加载TMX文件时会发生运行时一次,这是由于TMX文件使用它所在的位置的相对路径来引用瓦片集图像导致的。如果它们不在同一个文件夹中,cocos2d可能无法找到图像,因为在应用程序被加载到模拟器或设备上时,文件夹的结构是不会被保留的。
提示:
TMX文件是纯XML文件,所以你可能会好奇,想看看它内部的样子。如果看到图像文件是通过部分路径进行引用的,那么cocos2d可能无法加载被引用的图像。图像的引用应该只有图像名而没有任何路径,就像下面这样:<image source=”tiles.png”>。
10.3.2 设计瓦片地图
Tiled提供了4种模式用于编辑瓦片地图,可通过工具栏最右侧的4个图标进行切换。它们分别是:Stamp Brush(快捷键为B),绘制瓦片集中当前选中的瓦片;Bucket Fill(快捷键为F),填充相邻的由相同瓦片连成的区域;Eraser(快捷键为E),擦除瓦片;Rectangular Select(快捷键为R),选取某个区域内的瓦片,然后可以复制和粘贴选中的区域。
10.4 在cocos2d中使用直角瓦片地图
要在cocos2d中使用TMX瓦片地图,就必须把TMX文件和附带的瓦片集图像作为资源添加到Xcode项目中。
瓦片全局标识符(GID)的概念。它们是唯一的整数,每一个对应用瓦片地图中的一个瓦片。地图中的瓦片被连续地标上符号,号码从1开始。GID为0代表空白瓦片。
CCTMXTiledMap有一个propertiesForGID方法,如果所给GID对应的瓦片有属性,该方法会返回一个NSDictonary。这个NSDictonary中包含在Tiled中编写的属性。它将任何键/值对存储为NSString对象。
对于更加局部性的瓦片修改操作,可以使用removeTileAt和setTileGID方法在游戏中删除或替换某一个特定层中的瓦片。
10.4.1 定位被触摸的瓦片
10.4.2 提高性能和可读性
10.4.3 使用对象层
由于对象层是一种特殊的层,因此不能用瓦片地图的layerNamed方法来获取它。对象层在cocos2d中对应的类是CCTMXObjectGroup。可以通过使用瓦片地图的objectGroupNamed方法并将Tiled中设定的对象层的名称作为参数,来获取名为Objectlayer的对象层的CCTMXObjectGroup实例。接下来对NSMutableArray对象的objectLayer.objects进行了遍历,它包含了一个NSDictionary属性列表,这些NSDictionary属性和瓦片地图提供的propertiesForGID方法返回的一样,只不过这些NSDictionary属性和瓦片地图的propertiesForGID方法返回的一样,只不过这些NSDictionary属性的内容是Tiled提供的而不是用户编写的,它们仅仅包含了每个矩形的坐标。
10.4.4 绘制对象层矩形
每一个CCNode都有一个-(void) draw方法,通过重写该方法可以添加自定义的OpenGL ES代码。
在编写OpenGL代码时,修改后恢复状态是一个好习惯,否则会影响其他绘制代码产生的结果。OpenGL是一个状态机,因而会记住任何设置的修改,从而影响后面的绘制方法。为了避免此问题发生,在完成绘制后,任何被修改过的设置都应该恢复成默认值。
注意:
-(void) draw方法中绘制代码的z轴次序(z-order)总是0,而且会在所有z轴次序为0的节点之前进行绘制,这就意味着OpenGL ES代码绘制的结果会被任何z轴次序是0的节点覆盖,在绘制对象层的粒子中,必须将tileMap的z轴次序设为-1,这样一来,对象层矩形才能被绘制在瓦片地图之上。
10.4.5 滚动瓦片地图

    
[3] 斜角瓦片map
    来源: 互联网  发布时间: 2014-02-18
斜角瓦片地图
第11章 斜角瓦片地图
斜角瓦片地图使用2D图形来获得3D效果。由于它汲取了两者的优势,因此受到了广泛使用。
11.1 设计斜角瓦片地图图形
斜角瓦片地图使用轴测投影(axonometric projection)。这种投影让人以为是从一个角度在观察场景,从而产生视觉深度。轴测投影是一个技术术语,表示将一个旋转过的三维物体投影到二维平面上。得到的图像虽然斜了过来,但我们的大脑会以为它是一个三维物体。
11.2 使用Tiled编辑斜角瓦片地图
11.2.1 新建一个斜角瓦片地图
如果已经设置错误的瓦片大小,而又不想浪费了花几个小时设计好的瓦片地图,或者出于别的原因想修改瓦片地图大小或瓦片集的大小,有一个简单的方法可以做到。选择Xcode项目中的TMX文件,你就会看到它其实是纯文本的XML文件。在开头部分找到map节点,可以修改tilewidth和tileheight参数,直到觉得瓦片地图正确为止,同样,如果无法确定斜角瓦片集的大小,也可以修改瓦片集的tilewidth和tileheight参数。确保每次手工修改TMX文件后都在Tiled中重新加载,因为Tiled不会自动更新文件。
11.2.2 创建新的斜角瓦片集
注意,Tiled会默认Tile width和Tile height为前面在New Map对话框中设定的值,由于斜角瓦片的重叠,默认值总是要修改的,必须使用邪教瓦片的图像高度而不是菱形的高度。
11.2.3 设计斜角瓦片地图的基本规则
设计斜角瓦片地图最重要的规则是:至少要用两个层,这样游戏角色才能在某些物体的背后走动。一个层用来放置地面物体和地面瓦片,另一个层用来放置和其他瓦片重叠的物品或透明的物品。
11.3 将斜角瓦片地图应用到游戏编程中
11.3.1 在cocos2d中加载斜角瓦片地图
11.3.2 在cocos2d中设置斜角瓦片地图
默认情况下,为了初始化cocos2d,模版会在应用程序代理的applicationDidFinishLaunching方法中添加一个宏:
CC_DIRECTOR_INIT();
CC_DIRECTOR_INIT宏的定义保存在ccMacros.h中,它以一种标准的方式来初始化cocos2d。虽然这种初始化方法对于大多数游戏都是可以的,但对于斜角瓦片地图游戏就不行。
初始化cocos2d是需要修改EAGLView的某些参数。有两个地方需要修改:首先,启用OpenGL的深度缓冲区功能以更好地控制物体的z轴次序;其次,CCDirector必须使用2D投影才能和深度缓冲区协同工作。
深度缓冲区可以让OpenGL确定某个像素是在另一个像素之前还是之后,因而OpenGL可以决定是绘制这个新像素还是忽略它。这会带来额外的内存开销——24位的深度缓冲区差不多有500KB——但它让精灵和瓦片能正确地重叠在一起。
11.3.3 定位一个斜角瓦片
11.3.4 滚动斜角瓦片地图
11.3.5 斜角瓦片地图的边界问题
11.3.6 增加一个可移动的玩家角色
玩家角色是一个类,名为Player,它继承自CCSprite。
玩家角色的位置被故意设置为屏幕的中央。由于已经有一个方法可以将特定的瓦片移动到屏幕中央,因此将玩家角色放置在屏幕中央,可以让人感觉玩家角色在瓦片地图上行走。而实际上,玩家角色一直保持在统一位置。你完全不需要移动角色精灵。
1.使角色移动时被物体遮住
为了使角色可以被身前的物体(比如建筑、墙、树木等)部分遮住,随着角色的移动,你需要修改它的vertexZ值。
2.一块瓦片接一块哇哦地移动角色
4个CGRect变量——upperLeft、lowerLeft、upperRight和lowerRight,将屏幕分为4个象限。单击其中一个象限,角色就会朝这个方向移动。
3.碰撞检测
增加一个新的层并命名为Collisions,然后条件透明度滑块到差不多中间的位置。
在Tile Properties对话框中添加一个属性并取名为blocks_movement,再将它的值设为1。实际上,我在代码中会忽略这个值,关键是block_movement属性要有个值存在。
在Collisions层选中的情况下,将带有block_movement属性的瓦片画在地图上任何不可穿越的地方。
11.4 在游戏中加入更多内容
移动NPC(non-player character,非玩家角色)是需要NPC执行动作的,而且移动方向需要反转——因为这里不可以移动层,需要直接移动NPC。
一旦NPC可以移动,接下来要解决的就是如何使它们以最短路径从A移动到B,途中还要避开障碍物。解决的方法称为iA*路径算法。

    
最新技术文章:
▪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