纳智捷U6长得很时尚比较符合年轻人的审美, 外观方面很巧妙的将家族式特征融入其中, 借鉴了纳智捷大7的设计SUV风格, 一眼过去就会知道这是纳智捷的车。 前脸运用了大量的装饰镀铬, 并加入了大量线条设计, 使整车视觉上十分动感。 拥有现代感的投射式前大灯搭配镀铬材质的盾形水箱护罩, 视觉反差给人一种激进的前卫感受。 大面积梯形进气格栅让前脸更显霸气, 前置摄像头安置在内, 并通过中控台观察行车前方的盲点情况, 有利提高行车安全性。
随着从前翼子板往车门后延伸的凹槽腰线经过了尾灯后再与尾部的镀铬条相连, 形成了整车的环绕。尾部同样也采用了大量的镀铬装饰与车头呼应。 相比车头尾部设计师非常有个性的, 后档风玻璃处黑色的部分让尾部显得更加有立体效果。LED的尾灯看上去很简单, 但是视觉效果不错。车尾造型立体感十足, 加大倾斜角的尾门车窗搭配微微上翘的扰流尾翼和钻石切割样式的尾灯, 整体非常协调又富有个性。
说到车内,内饰是最吸引的地方。坐进车内会发现纳智捷U6采用了飞航式的设计理念, 中控台采用的是碳纤维类的环舱饰板, 造型设计充满了流行性,将中控台、 车门、座椅等各个部位巧妙的融为一体。独特的NightMode夜间模式可以让驾驶员在夜间驾车时防止眩光的发生,新潮的设计理念充分体现着纳智捷这个品牌的年轻时尚感和前卫科技感。
纳智捷U6还有一个抢眼的9寸中控台彩色大屏, 支持触摸 *** 作, 同时提供了影音娱乐, 蓝牙电话通讯、 定位导航、 系统设置、 行车安全以及HTC手机模式切换等功能。 自动升降高音喇叭, 这一点设计还是非常时尚与科技的, 同时在夜间还呈现蓝色氛围光, 配备JBL品牌音响。 纳智捷U6除最低配车型外, 其余四款车型均装配了HUD抬头显示器。 驾驶者只需按动方向盘后方的HUD按键, 就可以 “目不转睛” 地驾控车辆了。
纳智捷U6基于前驱车打造, 对于城市路况比较擅长,在试驾过程中感受最多的就是畅快的加速能力。 在起步初期略有涡轮迟滞, 随着涡轮的泄气声, 速度瞬间攀升, 仿佛在驾驭一辆性能车。
纳智捷U6与纳智捷5 Sedan同平台研发, 搭载一台最大功率为132kW, 最大扭矩为256Nm的20T发动机, 与20T发动机匹配的是一款6速手自一体变速器。单从数据上看, 并不理想, 但纳智捷U6的油门调校比较激进, 变速器降挡也比较积极。 对于这样的调校, 油耗并不理想。
简单介绍一下常用的GoPro Hero 4 Silver拍摄的延时摄影。其他型号设置差别不大,可参考设置。
1、打开机器,显示屏解锁后,向左触控滑动显示屏,显示功能菜单,选择“Burst”位置这个选项。确认后,向上触控滑动显示屏,出现下图右手边菜单。
2、点击Mode选项,出现三个选项(如下图右手边),选择Time Lapse选项。
3、设定拍摄参数。首先设定延时拍摄的拍摄间隔时间,也就是说,间隔多少时间,拍摄一张照片。点击“Interval”选项,出现多个选项,可以选择“05秒、1秒、2秒、5秒、10秒、30秒、60秒”几档选项。选好后,按右上角“Back”返回。
4、设定拍摄相片像素。点击“Megapixels”选项,可以选择“12MP Wide, 7MP Wide,7MP Medium,5MP Medium”几档选项。系统默认 12MP Wide。选好后,按右上角“Back”返回。
5、调整好这些以后,就可以开始延时摄影了。
在写前一篇文章 浅述Android Apk打包流程 的时候发现解压后的apk里res的资源文件,有多于我本地项目中的res资源文件夹。
如果我的项目中依赖了Android的一些库,比如design库,design里面有自己的res,那么在打包我的项目的时候,这些res会合并一起打包。
我查看了下,我确实依赖了design等库。
对比一下前三张图,我本地项目没有建anim、anim-v21、animator-v21(不再截图了)等资源文件夹,但是design库有,最终一并打包到我的项目中。
res目录下的文件夹是有命名规则的,不能随便起,为的是要适配不同的设备,而且是要做到最佳的资源匹配。
21、资源标签属性及优先级
除了分辨率外,同种资源之间可以有下面许多资源属性标签,它们在匹配过程中是有优先级顺序的。大家可以快速浏览一下即可。以下资源标签修饰语按照优先级从高到低的顺序排列。
3、Locale(语言和区域)
例如en表示英语,fr表示法语,en-rUS表示英语和美国地区。不区分大小写,r用于区分区域码。
4、Layout Direction(布局方向)
ldrtl,布局方向从右到左(阿拉伯语等会这样布局);ldltr,布局方向从左到右,是默认的隐式值。(这就解答了我前面第二个提的问题了)
5、Smallest Screen Width(最小宽度)
sw<N>dp,屏幕的基本尺寸。
sw320dp:适用于320 320 ldpi、320 480 mdpi、480 480 hdpi
sw600dp:适用于600 1024mdpi (7英寸的平板电脑)
sw720dp:适用于7201280 mdpi (10英寸平板电脑)
当你的屏幕的绝对宽度大于600dp时,屏幕就会自动调用layout-sw600dp文件夹里面的布局。这里的绝对宽度是指手机的实际宽度,即与手机是否横屏没关系,也就是手机较小的边的长度。
6、Screen Width(屏幕宽度)
w<N>dp ,设备的可用宽度值随着当前是横屏还是竖屏会产生变化,即它表示的是当前真实的宽度值。即当手机竖屏时,为较小边的长度;当手机横屏时,为较长边的长度。
7、Screen Height(屏幕高度)
h<N>dp,与lScreen Width的使用一样,只是这里指的是相对的高度。指手机相对放置的高度;即当手机竖屏时,为较长边的长度;当手机横屏时,为较小边的长度。
8、Size(屏幕大小)
samll:低密度,最小布局尺寸为320 426dp
normal:中等密度,标准屏幕最小布局尺寸约为320 470dp
large:中等密度,大屏幕最小布局尺寸为480 640dp
xlarge:大于中等密度,最小布局尺寸为720 960dp。基本用于平板电脑。
该配置并不仅适用于指定设备,如果没有匹配的资源,会选择与之最近的。 如果所有资源均大于当前屏幕的尺寸限定符,则系统不会使用这些资源,且应用运行时会崩溃。
9、Ratio(屏幕纵横比)
long:宽屏
notlong:非宽屏
10、Orientation(屏幕方向)
port:竖向的
land:横向的
square:正方形的(我也不知道这个是什么样子的)
11、UI Mode(UI模式)
无、car、desk、 television、appliance、 watch6种模式。(其实我没看明白是干嘛的,哈哈)
12、Night Mode(夜间模式)
night:夜间模式
notnight:非夜间模式
可以通过UiModeManager来开启和关闭这一功能。
13、Density(屏幕像素密度)
ldpi:低密度,约120dpi;mdpi:中等密度,160dpi;hdpi:高密度,240dpi;xhdpi:超高密度,320dpi;xxhdpi:超超高密度,480dpi;xxxhdpi:超超超高密度,640dpi;nodpi:不希望以匹配设备密度的位图资源;tvdpi:主要用于电视,约213dpi。anydpi:适用于所有密度,优先级高于其他限定符。
14、Touch Screen(触摸屏)
notouch:设备不带触摸屏
stylus:触摸屏通过手写笔 *** 作
finger:触摸屏通过手指 *** 作
15、Keyboard(键盘可用性)
keysexposed:设备有可用键盘。如果当前的软键盘被启用,那么即便设备没有键盘或者键盘不可用,这个状态仍可能有效。
keyshidden:设备有键盘,但当前被隐藏,而且没有软键盘启用。
keyssoft:设备当前软键盘启动,即便它处于可见或不可见状态。
16、Text Input(文本输入法)
nokeys:设备不带用用于文本输入的按键
qwerty:设备具有标准硬键盘(无论是否对用户可见)
12key:设备具有 12 键硬键盘(无论是否对用户可见)
17、Navigation State(定位键可用性)
描述定位键是否可用,指的是光标定位,非GPS导航的定位。
navexposed:定位键对用户可用
navhidden:定位键对用户不可用
18、Navigation Method(主要的非触摸屏定位方式)
nonav:设备除了触摸屏外没有其他定位方式
dpad:设备具有用于导航的方向键
trackball:设备具有用于导航的轨迹球
wheel:设备有方向滚轮用于定位,不常用
19、Dimension(尺寸)
20、Version(平台版本)
设备支持的 API 级别。例如v4 对应于 API 级别 4,带有 Android 16 或更高版本系统的设备。
22、怎么在AS中创建这些文件夹呢?
错在这里:
if(){
}else if(){
}
这是一个不成立的函数(代码),因为一个else只能与一个if使用;并且正确的格式应该为:
if(){
}else{
}
而且多个命令的话可以这样来弄,没必要那么麻烦:
function porcCmd(cmd)
cmd=cmdsplit(" ")//中间有空格
if(cmd[0]=="settime"){
if(cmd[1]==""){
}
if(cmd[1]==""){
}
}
这里用到的是数组,当然也可以是静态代码。一钩子(hook)函数
当执行了特定动作时,这些函数会运行并执行其他函数
1function useItem(x,y,z,itemId,blockId,side,itemDamage,blockDamage){}
当进行一次点击时(如使用物品或放置方块,食用食物不包括在内)会触发这个函数,并返回数据。
x:被点击方块的x坐标
y:被点击方块的y坐标
z:被点击方块的z坐标
itemId:点击时手里拿的物品id(空手为0)
blockId:被点击方块的id
side:方块被从哪个方向点击
itemDamage:点击时手里拿的物品附加值(伤害值)
blockDamage:被点击方块的附加值(伤害值)
2function attackHook(attacker,victim){}
当点击或攻击了一个生物mob(动物,怪物,玩家(待确认))时会触发这个函数,并返回数据。
attacker:进行了点击或攻击动作的mob
victim:被点击或攻击的mob
3function modTick(){}
每刻(1/20s 005s)执行一次
4function procCmd(cmd){}
在聊天里输入以"/"开头的话文字并执行(回车)时会触发
cmd:在聊天里输入的以"/"开头的文字(不包含"/")
5function newLevel(){}
当世界被载入时(出现"Building terrain"时)会触发
6function leaveGame(){}
当离开当前世界(返回主菜单)时会触发
7function entityAddedHook(entity){}
当一个新的实体被添加(包括箭,下落的方块,点燃的TNT等)时会触发
entity:被添加的自然实体
8function entityRemovedHook(entity){}
当一个实体(包括箭,下落的方块,点燃的TNT等)消失或死亡时会触发
entity:被移除的实体
9function deathHook(murderer, victim){}
当一个生物mod死亡时会触发
murderer:造成死亡的实体
victim:死亡的实体
10function levelEventHook(entity,eventType,x,y,z,data){}
当门(木门,栅栏门,陷阱门)被打开或关闭时会触发
当羊吃掉草时触发
睡觉时触发
entity:动作的实体(观测数据。总是为0)
eventType:事件类型(观测数据。开关门数据为1003,羊吃草的数据为2001,睡觉的数据为9800)
x,y,z:被点击的门方块的坐标,被吃掉的草方块的坐标,睡觉时为(0,0,0)
data:未知(观测数据。开关门,睡觉的数据为0,羊吃草的数据为2)
11function blockEventHook(x,y,z,eventType,data){}
每三秒检查所有箱子的开关状态
x,y,z:箱子的坐标
eventType:事件类型(观测数据为1)
data:未知(观测数据。关闭为0,打开为1,打开过程中为2(待确认)。检查大箱子时第二个被放置的箱子数值改变,另一个一直为0)
12function destroyBlock(x,y,z,side){}
当一个方块被破坏时会触发
x,y,z:方块的坐标
side:方块被从哪个方向破坏
二文字显示函数
也就是在游戏中现实文字的函数,也比较常用。
1print(text);
将数据显示在浮动窗口里
text可以是非实体变量或被"括起来的字符串
如print("text");
2clientMessage(text);
将数据显示在聊天框里
text可以是非实体变量或被"括起来的字符串
如clientMessage("text");
颜色 clientMessage(ChatColor颜色+text);
例子:clientMessage(ChatColorYELLOW + "It's the " + ChatColorRED + "Red " + ChatColorGREEN + "Green " + ChatColorYELLOW + "show!");
颜色表:BLACK,DARK_BLUE,DARK_GREEN,DARK_AQUA,DARK_RED,DARK_PURPLE,GOLD,GRAY,DARK_GRAY,BLUE,GREEN,AQUA,RED,LIGHT_PURPLE,YELLOW,WHITE
三获取坐标函数
即在游戏中获取一个坐标,并使用。
1getPlayerX();getPlayerY();getPlayerZ();
获取玩家的x,y,z坐标
2getPlayerEnt();
获取玩家的实体
3getYaw(ent);
获取实体ent的头部所朝向(左右)的角度值
ent为空时默认为玩家
面向z轴正方向是时为0±360n,面向x轴负方向时为90±360n
4getPitch(ent);
获取实体ent的头部所朝向(上下)的角度值
ent为空时默认为玩家
面向y轴正方向时为-90,面向y轴负方向时为90
5getCarriedItem();
获取玩家手里正在拿着的物品或方块的id
6getTile(x,y,z);
获取坐标为(x,y,z)的方块的id
四实体设置函数
对某个实体设置某种事件,并将其触发。
1setPosition(ent,x,y,z);
将一个实体ent的坐标设置为(x,y,z)
ent:目标实体
x,y,z:目标坐标
2setPositionRelative(ent,x,y,z);
设置指定实体对于玩家的相对位置
ent:目标实体
x,y,z:相对坐标
3setRot(ent,yaw,pitch);
将一个实体的头部方向设为(yaw,pitch)
ent:目标实体
yaw:水平角度
pitch:垂直角度
4setVelX(ent,velocity);setVelY(ent,velocity);setVelZ(ent,velocity);
将一个实体ent的x/y/z轴速度设为velocity
ent:目标实体
velocity:速度
5setTile(x,y,z,blockID,damageValue);
将特定的方块放置
x,y,z:放置的坐标
blockId:放置方块的id
damageValue:放置方块的附加值(伤害值)
6setPlayerHealth(halfHearts);
设置玩家的血量
helfHearts:半心量,20时为满血,但可以更高(<=255)
7setNightMode(boolean);
夜晚模式。此函数尚未被证实能正常使用,但存在于源码中
boolean:布朗值,只能为true或false
五实体生成(spawn)函数
如题,我不多说。
1spawnCow(x,y,z,"image");spawnChicken(x,y,z,"image");
在特定位置生成一只牛/鸡,并将贴图换成image
x,y,z:生成mod的坐标
image:在assets文件夹下的路径
2spawnPigZombie(x,y,z,heldItemID,"image");
在特定位置生成一只僵尸猪人,并将贴图换成image
x,y,z:生成mod的坐标
heldItemID:猪人手里拿的物品id
image:在assets文件夹下的路径
六杂项函数
一些五花八门的杂项函数。
1explode(x,y,z,radius);
在坐标为(x,y,z)处引发一场半径为radius的爆炸
2rideAnimal(player,target);
让player骑在target身上
player,target为实体
3addItemInventory(ID,amount,damageValue);
在背包里添加amount个id为ID,附加值(伤害值)为damageValue的物品
amount可以为负
4preventDefault();
阻止原有动作
七启动器(BlockLauncher-only)函数
这些函数只能在BlockLauncher启动器里使用
1bl_spawnMob(x,y,z,mobID,"image");(停用,请使用LevelspawnMob)
在特定位置生成一个实体,并替换贴图
x,y,z:指定位置
mobID:实体类别id
image:在assets文件夹下的路径
2bl_setMobSkin(mob,"image");
将指定实体的贴图更换
mob:指定的实体(不是实体类别)
image:在assets文件夹下的路径
八Level函数
Levelexplode(x,y,z,radius);
在坐标为(x,y,z)处引发一场半径为radius的爆炸
与explode(x,y,z,radius)相同
LevelgetTile(x,y,z);
获取坐标为(x,y,z)的方块的id
和getTile(x,y,z);相同
LevelsetTile(x,y,z,blockID);
放置方块
和setTile(x,y,z,blockID);相同
LevelgetData(x,y,z);
获取坐标为(x,y,z)的方块的伤害值(附加值)
LevelgetWorldDir();
返回当前世界所在的文件夹的名字
LevelgetWorldName();
返回当前世界的名字
LevelspawnChicken(x,y,z,"image");LevelspawnCow(x,y,z,"image");
在特定位置生成一只牛/鸡,并将贴图换成image
x,y,z:生成mod的坐标
image:在assets文件夹下的路径
和spawnCow(x,y,z,"image");spawnChicken(x,y,z,"image");相同
LeveldestroyBlock(x,y,z,shouldDropItem);
破坏一个方块,拥有正常破坏时的所有特效
x,y,z:方块坐标
shouldDropItem:是否掉落被破坏的方块本身。布尔值,只能为true/false
LeveldropItem(x,y,z,range,id,count,damage);
从指定坐标掉落方块
x,y,z:指定坐标
range;掉落的距离
id:掉落物id
count:掉落物数量
damage:掉落物伤害值
LevelgetAddress();
用途不明。。
返回值是实体。。
LevelgetChestSlot(x,y,z,slot);
读取指定箱子指定位置的物品id
x,y,z:箱子坐标
slot:物品位置
LevelgetChestSlotCount(x,y,z,slot);
读取指定箱子指定位置的物品数量
x,y,z:箱子坐标
slot:物品位置
LevelgetChestSlotData(x,y,z,slot);
读取指定箱子指定位置的物品伤害值(附加值)
x,y,z:箱子坐标
slot:物品位置
LevelsetChestSlot(x,y,z,slot,id,damage,amount);
向箱子指定位置放置物品
x,y,z:箱子坐标
slot:物品位置
id,damage,amount:物品id,伤害值,数量
LevelgetGameMode();
获取游戏模式。生存为0,创造为1。
LevelsetGameMode(mode);
设置游戏模式。生存为0,创造为1。
LevelgetTime();
获取当前时间。0为正午,7200为日落,8280为晚上,13320为日出。
LevelsetTime(time);
设置时间。0为正午,7200为日落,8280为晚上,13320为日出。
LevelgetSignText(x,y,z,line);
获取指定牌子的内容,为空时返回null
x,y,z:牌子的坐标
line:获取的行数,第一行为0
LevelsetSignText(x,y,z,line,"text");
设置指定牌子的内容
x,y,z:牌子的坐标
line:设置的行数,第一行为0
text:内容。必须是字符串
LevelplaySound(x,y,z,sound,volume,pitch);
播放声音
x,y,z:指定坐标
sound:MCPE中的声音
volume:音量
pitch:角度,用途不明
LevelplaySoundEnt(ent,sound,volume,pitch);
ent:自然实体
sound:MCPE中的声音
volume:音量
pitch:角度,用途不明
LevelsetNightMode(boolean);
夜晚模式。此函数尚未被证实能正常使用,但存在于源码中
boolean:布朗值,只能为true或false
与setNightMode(boolean)相同
LevelsetSpawn(x,y,z);
设置复活点
LevelsetTile(x,y,z,blockID);
将特定的方块放置
x,y,z:放置的坐标
blockId:放置方块的id
和setTile(x,y,z,blockID)相同
九Player函数
PlayeraddItemInventory(ID,amount,damage);
在背包里添加amount个id为ID,附加值(伤害值)为damageValue的物品
amount可以为负
和addItemInventory(ID,amount,damage)相同
PlayerclearInventorySlot(slot);
清除背包里指定位置的物品
slot:物品在背包的位置
PlayergetInventorySlot(slot);
获取背包里指定位置的物品id
slot:物品在背包的位置
PlayergetInventorySlotCount(slot);
获取背包里指定位置的物品数量
slot:物品在背包的位置
PlayergetInventorySlotData(slot);
获取背包里指定位置的物品伤害值(附加值)
slot:物品在背包的位置
PlayergetSelectedSlotId();
获取被选中的物品栏的id(slot)
PlayergetArmorSlot(slot);
获取身上的指定装备id
slot:装备位置
PlayergetArmorSlotDamage(slot);
获取身上指定装备的伤害值(耐久)
slot:装备位置
PlayersetArmorSlot(slot,id,damage);
设置身上的装备
slot:装备的位置
id:装备id
damage:装备伤害值(附加值)
PlayergetCarriedItem();
获取玩家手里正在拿着的物品或方块的id
和getCarriedItem()相同
PlayergetCarriedItemCount();
获取玩家手里正在拿着的物品或方块的数量
PlayergetCarriedItemData();
获取玩家手里正在拿着的物品或方块的伤害值(附加值)
PlayergetEntity();
获取玩家的实体
和getPlayerEnt()相同
PlayergetX();PlayergetY();PlayergetZ();
获取玩家的x,y,z坐标
和getPlayerX();getPlayerY();getPlayerZ();相同
PlayersetHealth(health);
设置玩家生命
health:半心量,20时为满血,但可以更高(<=255)
和setPlayerHealth(halfHearts)相同
十Entity函数
EntitysetFireTicks(ent,time);
使实体燃烧
ent:自然实体
time:燃烧时间,单位为秒
EntitygetAnimalAge(ent);
获取动物年龄
ent:动物实体
取值为-24000到0,玩家一直为0
EntitysetAnimalAge(ent,age);
设置动物年龄
ent:动物实体
age:动物年龄(-24000(幼年)到0(成年))
对敌对生物和玩家无效
EntitygetEntityTypeId(ent);
返回实体种类id
EntitygetYaw(ent);
获取实体ent的头部所朝向(左右)的角度值
ent为空时默认为玩家
面向z轴正方向是时为0±360n,面向x轴负方向时为90±360n
和getYaw(ent)相同
EntitygetPitch(ent);
获取实体ent的头部所朝向(上下)的角度值
ent为空时默认为玩家
面向y轴正方向时为-90,面向y轴负方向时为90
和getPitch(ent)相同
EntitysetRot(ent,yaw,pitch);
将一个实体的头部方向设为(yaw,pitch)
ent:目标实体
yaw:水平角度
pitch:垂直角度
与setRot(ent,yaw,pitch);相同
Entityremove(ent);
移除实体。如果玩家实体被移除,玩家将不可见且不可移动
ent:自然实体
EntityrideAnimal(player,target);
让player骑在target身上
player,target为实体
和rideAnimal(player,target)相同
EntitygetHealth(ent);
获取实体生命
ent:生物实体
EntitysetHealth(ent,health);
设置实体生命
ent:生物实体
health:半心量,20时为满血,但可以更高(<=255)
EntitysetCarriedItem(ent,ID,int,DamageValue);
ent:实体。只能是玩家,僵尸猪人,小白(skeletons)
ID:物品id
int:未知值。数字
DamageValue:物品伤害值(附加值)
EntitysetSneaking(ent,boolean);
EntitygetX(ent);EntitygetY(ent);EntitygetZ(ent);
获取实体坐标
ent:自然实体
EntitysetPosition(ent,x,y,z);
将一个实体ent的坐标设置为(x,y,z)
ent:目标实体
x,y,z:目标坐标
和setPosition(ent,x,y,z);相同
EntitysetPositionRelative(ent,x,y,z);
设置指定实体对于玩家的相对位置
ent:目标实体
x,y,z:相对坐标
和setPositionRelative(ent,x,y,z);相同
EntitysetVelX(ent,vel);EntitysetVelY(ent,vel);EntitysetVelZ(ent,vel);
将一个实体ent的x/y/z轴速度设为vel
ent:目标实体
vel:速度
与setVelX(ent,vel);setVelY(ent,vel);setVelZ(ent,vel);相同
EntityspawnMob(x,y,z,mobID,"image");(停用,请使用LevelspawnMob)
在特定位置生成一个实体,并替换贴图
x,y,z:指定位置
mobID:实体类别id
image:在assets文件夹下的路径
与bl_spawnMob(x,y,z,mobID,"image");相同
EntitysetMobSkin(mob,"image");
将指定实体的贴图更换
mob:指定的实体(不是实体类别)
image:在assets文件夹下的路径
与bl_setMobSkin(mob,"image");相同
EntitysetRenderType(ent,type);
用不同的模型来伪装实体
ent:自然实体
type:模型种类(0no idea 1no override 2点燃的TNT 3玩家 4掉落的物品 5 6鸡 7牛 8猪 9羊 10 11僵尸 12小白(骷髅) 13蜘蛛 14苦力怕(jj怪)(替换困难,有概率失败) 15射出的箭 16玩家(因为没有名字标签,游戏会崩溃) 17扔出的鸡蛋 18扔出的雪球 19挂画(游戏崩溃) 20正在掉下落的方块)
实体id:
10:鸡
11:牛
12:猪
13:羊
32:僵尸
33:苦力怕(jj怪)
34:骷髅(小白)
35:蜘蛛
36:僵尸猪人
64:掉落的物品
65:点燃的TNT
66:下落的方块
十一155启动器及以上可用材质函数。
BlockdefineBlock(blockId,name,[textures/六面材质/],0/材料源id/,true/透明/, int renderType/未知/)
BlocksetShape(blockId,x1,y1,z1,x2,y2,z2)//形状
BlocksetDestroyTime(id,time);
BlocksetExplosionResistance(id,res)//爆炸阻力,未实现
BlocksetLightLevel(id,level);
BlocksetColor(id,[color/数组/]);
BlocksetStepSound(blockId,sourceId);//未实现
BlockdefineBlock(blockId,name,[1,2,3,4,5,6/六面材质,右上角为0/],0/材料源id/,true/透明/, renderType)
renderType
0 标准
1 花
2 火把
3 火
4 流体
6 作物
7 门
8 台阶
10 楼梯
11 栅栏
13 仙人掌
14 床
18 玻璃板
19 植物的茎
21 栅栏门应该会有的,22之前的版本应该不支持:
Android在22时新增了一个实用的类UiModeManager可以便利的管该当前Android设备的夜间情势和行车情势,位于 androidappUiModeManager这个包中UiModeManager类利用 ContextgetSystemService(ContextUI_MODE_SERVICE) 来实例化,主要供应了以下几种办法
void disableCarMode(int flags) // 禁止行车情势,这里参数普通为UiModeManagerDISABLE_CAR_MODE_GO_HOME
void enableCarMode(int flags) // 启用行车情势,这里参数普通为UiModeManagerENABLE_CAR_MODE_GO_CAR_HOME
这里Android123提醒大家,在Android 22开始引入了另一种主题为Car Home,进入后手机的图标会更大,合适开车的人利用手机播放音乐,掌握导航什么的
int getCurrentModeType() //返回当前的情势,返回值有三种情形,夜间情势自动 MODE_NIGHT_AUTO ,夜间情势关闭 MODE_NIGHT_NO 和夜间情势开启 MODE_NIGHT_YES
夜间情势主如果设置Car Home主题的后台颜色,可以帮忙我们在夜间或白日看清楚,就像很多GPS导航软件夜间情势和后地图后台为纯黑,看起来不是那么刺眼
int getNightMode() //获得夜间情势状况
void setNightMode(int mode) //设置夜间情势
同时UiModeManager类还供应了四个action定义,比方进入行车情势 ACTION_ENTER_CAR_MODE,进入桌面情势ACTION_ENTER_DESK_MODE,退出行车情势 ACTION_EXIT_CAR_MODE 和退出桌面情势ACTION_EXIT_DESK_MODE1CGRect frame
1> 表示控件的位置和尺寸(以父控件的左上角为坐标原点(0, 0))
2> 修改这个属性,可以调整控件的位置和尺寸
2CGPoint center
1> 表示控件的中点(以父控件的左上角为坐标原点)
2> 修改这个属性,可以调整控件的位置
3CGRect bounds
1> 表示控件的位置和尺寸(以自己的左上角位坐标原点,位置永远是(0, 0))
2> 修改这个属性,只能调整控件的尺寸
4int tag
1> 表示控件的标识
2> 通过不同标识可以区分不同的控件
5CGAffineTransform transform
1> 表示控件的形变状态(旋转角度、缩放比例)
2> 创建CGAffineTransform的函数
` CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
创建一个x、y方向的缩放比例分别为sx、sy的形变值
CGAffineTransformMakeRotation(CGFloat angle)
创建一个旋转角度为angle的形变值
CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)
在形变值t的基础上,再进行缩放,x、y方向的缩放比例分别为sx、sy,然后返回一个新的形变值
CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
在形变值t的基础上,再进行旋转,旋转角度为angle,然后返回一个新的形变值
二、添加控件到控制器的view
[selfview addSubview:子控件];`
如: [selfview addSubview:子控件];
21设置按钮的属性
```
// 1创建按钮
// 11创建
UIButton btn = [[UIButton alloc] init];
// 12设置按钮的尺寸和位置
btnframe = CGRectMake(0, 0, 100, 100);
// 13设置按钮普通状态下的属性
// 131设置背景
UIImage normal = [UIImage imageNamed:@"btn_01png"];
[btn setBackgroundImage:normal forState:UIControlStateNormal];
// 132设置文字
[btn setTitle:@"你好" forState:UIControlStateNormal];
// 133设置文字颜色
[btn setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
// 14设置按钮高亮状态下的属性
// 141设置背景
UIImage high = [UIImage imageNamed:@"btn_02png"];
[btn setBackgroundImage:high forState:UIControlStateHighlighted];
// 142设置文字
[btn setTitle:@"Hello" forState:UIControlStateHighlighted];
// 143设置文字颜色
[btn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
// 15监听按钮点击
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
```
1这是控制器的一个方法
2当控制器的view创建完毕的时候会调用一次
1value属性可以获得当前的进度值
2按钮的value发生改变了,会触发UIControlEventValueChanged事件
1加载一个plist文件的时候,会返回一个plist的根节点对象(Root)
1利用NSBundle可以访问某个资源包的内容
2如果访问软件中最主要资源包的内容,应该用mainBundle
```
NSBundle bundle = [NSBundle mainBundle];
```
3利用NSBundle获得文件的全路径
```
NSString path = [bundle pathForResource:@"descs" ofType:@"plist"];
```
```
ViewControllerh
#import@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton btn;
// 重置
- (IBAction)reset:(id)sender;
// 行走
- (IBAction)run:(id)sender;
// 缩放
- (IBAction)scale:(id)sender;
// 旋转
- (IBAction)rotate:(id)sender;
@end
```
```
#import "ViewControllerh"
#define kDelta 50
//const int delta = 50;
@interface ViewController ()
//{
// CGFloat _angle;
//}
@end
@implementation ViewController
//- (void)begin
//{
// // 0动画(头部-开始动画)
// [UIView beginAnimations:nil context:nil];
// // 设置动画的执行时间
// [UIView setAnimationDuration:10];
//}
//
//- (void)end
//{
// // 4动画(尾部-提交动画-执行动画)
// [UIView commitAnimations];
//}
- (void)btnClickWithBlock:(void (^)())block
{
// 0动画(头部-开始动画)
[UIView beginAnimations:nil context:nil];
// 设置动画的执行时间
[UIView setAnimationDuration:10];
block();
// 1动画(尾部-提交动画-执行动画)
[UIView commitAnimations];
}
#pragma mark 控制按钮走动(上下左右)
- (IBAction)run:(id)sender {
[self btnClickWithBlock:^{
// 1先取出frame
// CGRect tempFrame = _btnframe;
CGPoint tempCenter = _btncenter;
// 2取出按钮的tag标记
int tag = [sender tag];
// CGFloat delta = 100;
switch (tag) {
case 1: // 上
// tempFrameoriginy -= kDelta;
tempCentery -= kDelta;
break;
case 2: // 右
// tempFrameoriginx += kDelta;
tempCenterx += kDelta;
break;
case 3: // 下
// tempFrameoriginy += kDelta;
tempCentery += kDelta;
break;
case 4: // 左
// tempFrameoriginx -= kDelta;
tempCenterx -= kDelta;
break;
default:
break;
}
// 3重新赋值按钮的frame
// _btnframe = tempFrame;
_btncenter = tempCenter;
}];
}
#pragma mark 放大\缩小
- (IBAction)scale:(id)sender {
[self btnClickWithBlock:^{
CGFloat scale = [sender tag] == 20 12 : 08;
_btntransform = CGAffineTransformScale(_btntransform, scale, scale);
}];
}
#pragma mark 左旋转\右旋转
- (IBAction)rotate:(id)sender {
// _angle -= M_PI_4;
// 弧度 314 - π
// 角度 180
// 向左旋转45°
// _btntransform = CGAffineTransformMakeRotation(- M_PI_4);
// _btntransform = CGAffineTransformRotate(_btntransform, M_PI_4 (10 == tag-1:1));
[self btnClickWithBlock:^{
int tag = [sender tag];
if (10 == tag) { // 左
_btntransform = CGAffineTransformRotate(_btntransform, M_PI_4 -1);
} else { // 右
_btntransform = CGAffineTransformRotate(_btntransform, M_PI_4 1);
}
}];
}
#pragma mark 重置
- (IBAction)reset:(id)sender {
// 清空之前所有的形变状态(消除以前的旋转、缩放等状态)
// _btntransform = CGAffineTransformIdentity;
[self btnClickWithBlock:^{
_btntransform = CGAffineTransformIdentity;
}];
}
@end
```
```
#import@interface ViewController : UIViewController
- (IBAction)nightMode:(UISwitch )sender;
- (IBAction)imageSizeChange:(UISlider )sender;
- (IBAction)setting;
- (IBAction)sliderValueChange:(UISlider )sender;
@property (weak, nonatomic) IBOutlet UIImageView imageView;
@property (weak, nonatomic) IBOutlet UILabel imageNo;
@property (weak, nonatomic) IBOutlet UILabel imageDesc;
@property (weak, nonatomic) IBOutlet UIView settingView;
@end
```
```
#import "ViewControllerh"
@interface ViewController ()
{
NSArray _allDescs;
}
@end
@implementation ViewController
#pragma mark 控制器的view加载完毕后会调用一次
- (void)viewDidLoad
{
[super viewDidLoad];
// 1获得所有的描述(通过解析plist文件来创建数组对象,比如传入文件的全路径)
// 如果要访问项目中资源包里面的所有资源。应该用mainBundle
NSBundle bundle = [NSBundle mainBundle];
// 获得文件的全路径
NSString path = [bundle pathForResource:@"descs" ofType:@"plist"];
// 加载path对应的文件来创建数组
_allDescs = [NSArray arrayWithContentsOfFile:path];
// 2设置默认的描述
_imageDesctext = _allDescs[0];
}
#pragma mark 夜间模式
- (IBAction)nightMode:(UISwitch )sender {
if (senderon) { // 开
selfviewbackgroundColor = [UIColor darkGrayColor];
} else { // 关
selfviewbackgroundColor = [UIColor whiteColor];
}
}
#pragma mark 尺寸改变了
- (IBAction)imageSizeChange:(UISlider )sender {
// // 1取出frame
// CGRect tempFrame = _imageViewframe;
//
// // 2修改frame
// tempFramesizewidth = sendervalue 320;
// tempFramesizeheight = sendervalue 100;
//
// // 3重新赋值frame
// _imageViewframe = tempFrame;
_imageViewtransform = CGAffineTransformMakeScale(sendervalue, sendervalue);
}
#pragma mark 点击了设置
- (IBAction)setting {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:05];
// 1取出中点
CGPoint tempCenter = _settingViewcenter;
// 2修改y值
// tempCentery -= _settingViewframesizeheight;
if (_settingViewframeoriginy == selfviewframesizeheight) { // 设置界面目前看不见
tempCentery -= _settingViewboundssizeheight;
} else { // 能看见设置界面
tempCentery += _settingViewboundssizeheight;
}
// 3重新赋值
_settingViewcenter = tempCenter;
[UIView commitAnimations];
}
#pragma mark slider值改变
- (IBAction)sliderValueChange:(UISlider )sender {
// 1设置中间的
// 获得名称 %f 不保留任何小数
NSString imageName = [NSString stringWithFormat:@"%fpng", sendervalue];
_imageViewimage = [UIImage imageNamed:imageName];
// 2设置序号(第几张)
_imageNotext = [NSString stringWithFormat:@"%f/16", sendervalue + 1];
// 3设置描述
int no = (int)(sendervalue + 05);
_imageDesctext = _allDescs[no];
}
@end
```
如果还有什么不太明白,欢迎留言。2016第一篇blog,谢谢大家!
出处: >
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)