http://android.git.kernel.org/?p=platform/packages/apps/PackageInstaller.git;a=tree;h=refs/heads/donut;hb=refs/heads/donut
<activity android:name=".PackageInstallerActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="content" /> <data android:scheme="file" /> <data android:mimeType="application/vnd.android.package-archive" /> </intent-filter> </activity> <activity android:name=".UninstallerActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.DELETE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="package" /> </intent-filter> </activity>
String fileName = Environment.getExternalStorageDirectory() + "/myApp.apk"; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); startActivity(intent);
Uri packageURI = Uri.parse("package:com.android.myapp"); Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI); startActivity(uninstallIntent);
为了安装更友好:
int result = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 0); if (result == 0) { // show some dialog here // ... // and may be show application settings dialog manually Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_SETTINGS); startActivity(intent); }
下面开始图解教程:
一 安装虚拟机设置
在起始页中点击新建虚拟机
接下来进入虚拟机设置 用典型的满足大部分用户
选择你要安装的操作系统 这里是ubuntu
设置虚拟机名称与位置
网络类型设置 推荐使用 NAT 设置简单
磁盘容量 就用默认的吧(如果是fat32格式,需要分割磁盘,ntfs就不用了)
设置完毕
自定义设置
1 虚拟机的名称和保存目录,请根据自己的需要进行设置
2 虚拟处理器数,选择一个
3 虚拟机内存,请根据自己物理内存实际情况进行设置,一般默认即可
4 网络连接类型。如果不想让虚拟机访问,请选择“不使用网络连接”。如果需要访问网络,请根据自己的情况设置,在此我推荐使用第二项“NAT”,这个选项让虚拟机使用宿主计算机的IP访问网络,宿主计算机将共享网络给虚拟机。
5 I/O适配器,选择“SCSI Logic”项目
6 虚拟机磁盘类型,选择“SCSI”
7 .磁盘容量,根据自己实际情况设置,建议至少分配4GB的磁盘容量
8 磁盘文件保存路径,同样根据自己情况设置,该保存路径的剩馀磁盘空间必须大于您设置的虚拟机磁盘最大容量
9 如果没有软驱,选中floppy,把“打开电源时连接”前面的勾去掉即可
开始安装步骤
如果是光盘安装,选择使用物理驱动器,如果是镜像安装,选择iso镜像然后浏览选中即可。
接下来启动虚拟机电源 可能出现无法连接设备 floppy0 。这个设备是软驱,作用不大,可以把软驱设置 把打开电源时连接前的勾打掉。然后在命令下面的编辑虚拟机设置把软驱移除,以后就不显示了。
虚拟机启动画面
选择简体中文
选择安装ubuntu
开始安装过程
点前进即可,后面有一个需要设置账号密码
开始复制文件
当安装进程到82%的时候,停住了,其实等10多分钟就会好。(有一个解决方法是拔掉网线,或者打开虚拟机网卡的设置,把已连接的勾打掉,我没试验过,网上搜的方法)
安装完毕后重启进入系统
安装完毕。
二 设置软件源
在Ubuntu中,“软件源”是指一个可以获得软件的网站,这个网站上有“软件仓库”,软件仓库中存储着各种各样的 软件。当你需要用到一个软件的时候,就可以通过特殊的工具,自动地下载并自动地安装。刚安装好的Ubuntu系统会自动地设置一个可用的软件源,如果安装 时设置成简体中文,则会被自动设置成中国的官方软件源,速度会很快。若不喜欢默认的设置,此时可以用下面的方法来更改。
1. 从桌面左上角的系统菜单中,单击“System”->“系统管理”->“软件源”菜单项,启动“Software Sources”对话框。如图所示。
2. 通过修改“Download from”可以更改自己喜欢的软件源(软件的下载网站),如图所示。
3. 对于类似“哪个源更快”这样的问题,并没有一个标准答案。每个人的网络状况有不同,不同网站的下载速度对会不同。选择一个,然后点choose server,更改完设置之后,在Software Sources对话框中,单击“Close”按钮关闭对话框。此时会提示是否更新可用的软件列表,如图所示。
4. 单击“Reload”更新可用软件列表。
现在你已经有了自己喜欢的软件源,现在可以更新软件源的信息了。也许软件源的更改你可以看成是可有可 无的事情,但是这一步是必须的,它可以确保自己的电脑知道整个完整的软件源拥有什么样的软件(这个数量是十分庞大的),并且如果不这么做的话,可能会有一 些功能会因此而无法正常工作。
1. 单击“System”->“系统管理”->“更新管理器”菜单项,打开“Update Manager”对话框,如图所示。
2. 单击“Check”按钮实施更新。
3. 更新完成后,单击“Close”按钮关闭“Update Manager”对话框。
三 安装中文支持
现在可以安装完整的简体中文支持了。单击“System”->“系统管理”->“Language Support”,启动“Language Support”对话框。在语言列表中找到“汉语“,并将其右边的小方框打钩,如图所示。
单击“OK”按钮,将自动下载和安装完整的简体中文支持。安装完成后,将提示要重新启动电脑所在更改才会生效。重新启动电脑后(只的是在虚拟机中的重启,真实电脑不需要重启),完整的简体中文支持便已成功安装。
四 安装vmtools
点击右下cd-rom ->使用iso镜像 ->浏览选择linux.iso(在vmware安装目录下VMware Workstation文件夹里)然后重启,看到桌面如下图所示
双击光盘
把后缀是tar.gz的文件右键选择解压缩,在右侧窗口位置选择文件系统->tmp,然后解压缩,文件就被解压缩到tmp文件夹了
解压缩完成后,点应用程序-->附件-->终端,在里面输入cd /tmp(cd与/之间有空格),在输入cd ./vmware-tools-distrib(cd与/之间有空格,/之前还输入了一个. ),继续输入sudo ./vmware-install.pl(sudo与/之间有空格,/之前有.),如果有需要输入密码的直接输入,然后回车,没有*显示的,接着就开始安装,一路回车,有yes的输入y,安装完后,可以输入数字选择分辨率。最后虚拟机重启。
五 安装你所喜欢的软件
软件的安装主要通过两个方法:“应用程序”->“添加/删除”菜单项,或者“系统”->“系统管理”->“新立德软件包管理器”。两者 的界面分别如下。使用方法都很简单,标记要安装的软件包之后,单击“应用”按钮(新立德软件包管理器)或“应用改变”按钮(添加/删除)就会自动下载和安 装所有软件。
打开网站 取消
【专业iPhone 3d游戏、移动游戏开发:北京贝武易科技公司】
有疑问请联系我QQ:363596350
下面是unity3d script脚本练习,感谢
作者: Graham McAllister
译者:威阿(2009-04-06)
:arrow: 脚本命名规范:
在开始前,先说一下在Unity中的一些规范.
变量 – 首写是小写字母.变量用来储存游戏状态中的任何信息.
函数 – 首写是大写字母.函数是一个代码块,只需要写一次,在需要时候可以被再次重用.
类 – 首写是大写字母.可以被认为是函数的库.
提示:当阅读范例代码或者Unity的API,要注意首写字母,这将有助于你更好的理解对象之间的关系.
我们第一个项目是在一个简单的游戏场景中走动.
设置场景
- 启动Unity.
首先,让我们创建一个用来行走的平面,用一个扁的Cube.
- 创建一个Cube,缩放x,y,z为”5,0.1,5”,它现在看起来应该是一个大平板.在层次视图(Hierarchy View)中重命名为”Plane”.
- 创建第二个Cube,将它放置在这个大平板的中心位置.如果在游戏视图(Game View)看不到它们,那么改变主相机位置使它们可见.重命名该物体为”Cube1”.
- 你也应该建立一个点光源,并且放在大平板之上,使它们更清晰.
- 保存 选择菜单File->Save As保存这个场景文件.
我们第一个脚本 我们现在开始游戏设计.我们打算让Player移动. 通过控制主相机的位置来实现,要做到这一点,我们现在要写一个脚本来读取键盘的输入.然后把脚本和相机链接起来(更多的在下一节).
- 首先创建一个空脚本.选择” Assets->Create->Javascript”并在项目面板重命名为”Move1”.
- 双击Move1脚本,它将打开,并且默认包含有Update()函数,我们将我们的代码插入这个函数,任何加入Update()函数中的代码都将在每一帧(frame)执行一次. 在Unity中为了移动一个游戏对象我们需要用transform来更改它的位置,属于Translate,这个Translate函数有x,y和z三个参数,因为我们想通过光标键控制主相机,我们只需要下面这些代码,来决定按键按下后参数的变化:
function Update () { transform.Translate(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); }
Input.GetAxis()函数返回-1或1的一个值,例如在横轴上左光标键映射为-1,右光标键映射为1.
注意参数0为y轴,因为我们不希望镜头上仰.横轴和竖轴是在输入设置(Input Settings)中预先定义好的.从Edit->Project Settings->Input中很容易重定义按键映射.
- 打开脚本Move1并输入上面的代码,注意大小写.
连接脚本 现在我们第一个脚本写完了,怎么让Unity的游戏对象具有这个脚本行为呢?我们要做的是赋予这个脚本给游戏对象来体现脚本的行为.
- 首先点击你希望应用此脚本的游戏对象,对于我们而言,这里将是主相机,你可以从层次视图和场景视图中选择它.
- 然后从菜单中选择Components->Scripts->Move1 ,将这个脚本赋予相机,你在检视面板中看到主相机有Move1这个组件. 提示:你也可以从项目视图拖拽脚本到场景视图的游戏对象上.
- 点击播放按钮运行游戏,你能通过光标键或W,S,A,D键来移动主相机.你也许注意到了,摄影机移动的有点太快了,让我们来找一种更好的办法来控制摄像头的速度.
注:其实这里Input.GetAxis只是获得一个方向,真正的是需要我们定义一个时间和速度。
Delta time
正如先前在Update()函数里的代码,相机的速度是按帧执行的.然而我们需要游戏对象的移动按秒执行.为了实现这一目标,我们需要将返回的值乘以Input.GetAxis() 函数中的Time.deltaTime:
var speed = 5.0; function Update () { var x = Input.GetAxis("Horizontal") * Time.deltaTime * speed; var z = Input.GetAxis("Vertical") * Time.deltaTime * speed; transform.Translate(x, 0, z); }
- 将上面的代码更新到Move1脚本.
注意Update()外的这个速度变量.这是所为的暴露变量,这个变量会在检视面板中看到.它是很有用的,实际使用中可以方便的调整它的值,这比改变代码来说方便的多.
链接变量:
通过Unity界面来连接变量是非常强大的.
Unity的功能.它允许在Unity界面上拖拽(drag and drop)的方式来赋予脚本代码. 这是快速又简洁的主意.这样在Unity界面中完成连接变量,我们知道我们总是需要脚本代码中暴露的变量,以便我们在检视面板中指派参数.为了演示连接变量的概念,我们建立一个跟随玩家(主相机)的聚光灯.
- 添加一个聚光灯到场景视图,移动它靠近其他游戏对象.
- 创建一个JavaScript脚本并重命名为Follow.
让我们想想我们要做的,我们希望主相机的地方有个聚光灯所照耀.事实上,Unity中有个函数能做到这一点. transform.LookAt(). 如果你开始想”我该怎么做?”和已经想了很多代码.那么要记得经常查看Unity的函数API.,我们能同样的猜想查看API中的” transform’”章节,为感兴趣的游戏对象的位置和旋转. 现在,我们来到连接变量章节,我们如何使用LookAt()参数呢?我们可以编写代码指定一个游戏对象,但是我们是想通过Unity GUI来指派变量,因此我们将用一个暴露变量(Transform类型).我们的Follow.js脚本应该如下:
var target : Transform; function Update () { transform.LookAt(target); }
- 赋予脚本给聚光灯,当这个脚本成功添加后,”target”变量就会暴露了. - 选中聚光灯,从层次视图拖拽主相机到监视面板中的”target”暴露变量上分配给target变量,即聚光灯将跟随主相机.如果我们想聚光灯跟随不同的对象,我们也可以拖拽不同的对象过去(当然只要它的类型是Transform).
- 播放游戏,在场景视图中你能看到聚光灯跟随在主相机周围.你可以改变聚光灯的位置来改变效果.
访问组件
作为一个游戏对象能有多个脚本(或其他组件).它不可避免的要访问其他组件的函数或变量.Unity中通过GetComponent() 函数来实现这个. 我们现在要添加另外的脚本来让按下跳跃键(默认空格键)时让聚光灯射向Cube1.
让我们先思考这个问题,我们要做的是:
1. 监视跳跃键被按下.
2. 当跳跃键按下时,聚光灯将照射Cube1.我们如何做到这一点呢?那么Follow脚本包含一个”target”变量,其值确定哪些游戏对象被聚光灯所照射.我们需要为这个值设定一个新的参数.我们可以写代码给这个值为cube(看本节后的”写代码”),但我们知道暴露了这个变量,通过GUI上指定变量的值是更好的办法:
- 创建一个新的JavaScript脚本并重命名为Switch,添加代码到Switch.js:
var switchToTarget : Transform; function Update () { if (Input.GetButtonDown("Jump")) GetComponent(Follow).target = switchToTarget; }
这样写代码
前面的教程中我们提到,可以通过写代码的方式指定变量(而不是通过Unity界面),让我们看看如何做.记住,这只是用来比较,建议通过Unity界面来给变量赋值.早先按下空格时告诉聚光灯聚焦到Cube1上.我们的是做一个暴露变量在Switch脚本,我们便可以在Unity的界面上拖拽Cube1上去.在代码中主要有两种方法做到这一点:
1. 使用游戏对象的名称(name)
2. 使用游戏对象的标签(tag)
1. 游戏对象名称 可以从层次视图中看到游戏对象的名称.用GameObject.Find()函数来使这些名称作为参数. 因此如果我们想按下跳跃键时候切换聚光灯从主相机到Cube1,代码如下::
function Update () { if (Input.GetButtonDown("Jump")) { var newTarget = GameObject.Find("Cube").transform; GetComponent(Follow).target = newTarget; } }
注意没有暴露变量而是直接使用代码.查看API获得更多Find()的用法.
2. 游戏对象标签 游戏对象表情是字符串用于识别一个组件.在检视视图中点击Tag按钮查看内建的标签.你也可以创建自己的标签. GameObject.FindWithTag()函数能通过具体标签寻找组件和返回一个字符串作为参数.代码如下:
function Update () { if (Input.GetButtonDown("Jump")) { var newTarget = GameObject.FindWithTag("Cube").transform; GetComponent(Follow).target = newTarget; } }
7. 实例
通常在运行时创建(create)对象(如游戏正在播放).要这样做,我们要用到Instantiate函数. 让我们讲述如何在每次按下开火按钮(或按鼠标左键或左Ctrl键)后通过实例(建立)一个新的游戏对象. 那么我们怎么做呢?我们希望用户像往常一样走动,当按下开火按钮,实例化创建一个新的对象.思考以下几点:
1. 哪个物体做我们的实例?
2. 在哪里做实例化?
关于哪个对象到实例,最好的解决办法是暴露变量.这意味着我们随时可以通过拖拽游戏对象到变量来改变对象为实例. 至于哪里做实例化,现在我们只要实现当按下开火按钮时在用户(主相机)当前位置创建新的游戏对象. 实例化函数有三个参数:
(1)我们要建立一个对象,
(2)对象的三维位置
(3)对象的旋转位置.
完整的代码如下(Create.js):
var newObject : Transform; function Update () { if (Input.GetButtonDown("Fire1")) { Instantiate(newObject, transform.position, transform.rotation); } }
不要忘记, transform.position和transform.rotation是附加到脚本的transform的位置和选择的,这里假如是主相机(Main Camera).然而,当一个对象被实例化,通常将对象设置为预设(prefab),我们现在将Cube1游戏对象设置为预设.
- 首先,让我们嫩创建一个空的预设,选择Assets->Create->Prefab.重命名这个预设为”Cube”.
- 从层次视图拖拽Cube1游戏对象到项目视图的Cube预设上.注意预设图标的变化. 现在我们创建Javascript代码.
- 创建一个新的脚本和命名为Create ,并插入上面的代码.
- 把这个脚本赋予给主相机(Main Camera)和将Cube预设赋予主相机上的newObject 变量.
- 运行游戏,并向以往一样走动.每当按下开火按钮(鼠标左键或左Ctrl)你都能看到一个新的Cube出现.
调试
调试是发现和修正你的代码中人为错误的技巧,Unity中提供了Debug类,我们现在看看Debug.Log()函数.
Log Log()函数允许用户发送信息到Unity的控制台.这样做的原因可能包括:
1. 在运行时要验证某部分代码是否达成.
2. 报告变量的状态. 我们现在使用Log()函数,当用户点击开火按钮时发送一个消息到Unity控制台.
- 打开创建的脚本并在” Instantiate’”代码内”if”处添加如下代码:
Debug.Log("Cube created");
- 运行游戏和点击开火按钮,你能看到Unity界面下方显示” Cube created”,你可以点击这个提示详细查看Unity控制台.
Watch
另外一个有用的功能是用于调试私有变量.这使得当Debug模式被选中时检视视图中的变量,但它不能被编辑.为了证明这一点,我们将暴露一个私有变量作为Cube实例的计数. - 再次打开创建的脚本并添加两行:
(1) 添加私有变量引用cubeCount
(2) 当一个cube实例创建后增加这个变量 完整代码如下(Create.js):
var newObject : Transform; private var cubeCount = 0; function Update () { if (Input.GetButtonDown("Fire1")) { Instantiate(newObject, transform.position, transform.rotation); Debug.Log("Cube created"); cubeCount++; } }
- 运行游戏并点击开火按钮创建一些Cube,注意每当一个新的Cube实例创建后cubeCount变量的递增.同样这个数值是灰色的,意味着变量是只读的(不能编辑).
常见脚本类型
每当一个新Javascript被创建,默认情况下将包含Update()函数.这一届将讲述其他常见的函数,简单的从下面列表中替换Update()函数名字.
FixedUpdate()
置于这个函数中的代码每隔一定间隔执行(固定的帧率).它通常被用来Rigibody中用力的时候.
// Apply a upwards force to the rigid body every frame function FixedUpdate () { rigidbody.AddForce (Vector3.up); }
Awake()
这里的代码将被用作初始化. Start() 这个函数将在Update()之前,但在Awake()之后执行. Start () 函数和Awake()函数的不同点在于Start()函数仅在脚本启用时候执行(检视视图如果它的复选框被选中).
OnCollisionEnter()
当游戏对象的碰撞脚本与另外的游戏对象碰撞时执行这个函数内的代码.
OnMouseDown()
当鼠标在一个载有GUI元素(GUIElement)或碰撞器(Collider)的游戏对象里按下时执行该函数内的代码.
// Loads the level named "SomeLevel" as a response // to the user clicking on the object function OnMouseDown () { Application.LoadLevel ("SomeLevel"); }
OnMouseOver()
当鼠标在一个载有GUI元素(GUIElement)或碰撞器(Collider)的游戏对象里的按下动作抬起后执行该函数内的代码.
// Fades the red component of the material to zero // while the mouse is over the mesh function OnMouseOver () { renderer.material.color.r -= 0.1 * Time.deltaTime; }
查看Unity API 获得这些函数的更多信息. 此教程介绍了Unity脚本的基本概念.你现在应该看看其他Unity教程或自己试试吧!
【专业iPhone 3d游戏、移动游戏开发:北京贝武易科技公司】
有疑问请联系我QQ:363596350