2012年(4)
分类: 系统运维
2012-12-06 00:42:50
添加灯光
为实现添加灯光的功能,需要在图层说明中的light标签下设置一些选项,即:
var myLevel = {
light : {
myLight : {
//选项设置处
}
}
};
接下来我们定义一个有向点光源。灯光位于角色上方5个单位、正前方20个单位处(因而直角坐标偏置量为[0,5,20])。我们还得将其旋转180度(即1.54弧度)以使灯光射向场景之中(即打在角色身上)。这里我们将灯光的颜色设为白色:
var myLevel = {
light : {
myLight : {
type : GLGE.L_POINT,
rotY : 1.54,
color : "#fff",
attached : ['character', 0,5,20]
}
}
};
注:将介绍更多有关的资料信息。
添加材质
为实体添加材质之前要先定义一个模板。同(为角色的敌人)创建greencube模板的方法相类似,我们使用 对象来创建一个长方体。 我们将新建一个具有砖型质地的材质模板并将其应用于我们的平台中:
manager.addCustomDefinitions({
templates : {
brickscube : ['meshTemplate', {
mesh : gma.unitCubeInfo.mesh,
material : {texture : 'bricks.jpg'}
}]
}
});
注意
为使以上脚本能够正常工作,你需要在HTML的所在目录下存有图片文件 bricks.jpg。你可以自行创建该文件或者。
缺省情况下材质将按原图的高度和宽度逐像素点渲染一次,不过我们希望我们的砖型质地能够显示得再大点。为了达到这个目的,可以设置repeatX和repeatY属性值来降低材质渲染过程中的单位渲染量:
manager.addCustomDefinitions({
templates : {
brickscube : ['meshTemplate', {
mesh : gma.unitCubeInfo.mesh,
material : {
texture : 'bricks.jpg',
//以下参数将使砖型质地的大小为原图2倍
repeatX : 0.5,
repeatY : 0.5
}
}]
}
});
你可以而且应当将该新模板添加在原greencube模板之后,以下显示了最后的效果。最后,还需要把这个模板应用于我们的平台中:
var myLevel = {
...,
entities : [
{template:'brickscube', top:0, left:0, width:30, height:3},
{template:'brickscube', top:0, left:39, width:30, height:3},
...
// 为说明模板功能省略了相关敌人设置的代码
]
};
最终的结果
require([
'gma/base',
'gma/manager',
'gma/entities/character',
'gma/events',
'gma/entities/enemy'
],
function(gma) {
var manager = gma.manager({
width : 600,
height : 500
});
manager.character = gma.character({
left : 0,
bottom : 0,
width : 3,
height : 6,
depth : 3
});
manager.addCustomDefinitions({
templates : {
greencube : ['meshTemplate', {
mesh : gma.unitCubeInfo.mesh,
material : {color : "#090"}
}],
brickscube : ['meshTemplate', {
mesh : gma.unitCubeInfo.mesh,
texture : {
src:'bricks.jpg',
repeatX:0.5,
repeatY:0.5
}
}]
},
types : {
jumpingJack: ['jumpingEnemy', {
width : 1,
height : 2,
template : 'greencube'
}]
}
});
var myLevel = {
spawn : {
main : [15, 24]
},
camera : {
attached : ['character', 0, 6, 60]
},
light : {
myLight : {
type : GLGE.L_POINT,
rotY : 1.54,
color : "#fff",
attached : ['character', 0,5,20]
}
},
entities : [
{template:'brickscube', top:0, left:0, width:30, height:3},
{template:'brickscube', top:0, left:39, width:30, height:3},
gma.platformEnemy({bottom:0, left:45, width:3, height:6}),
gma.patrolEnemy({bottom:0, left:6, width:3, height:6, limitLeft: 3, limitRight:12}),
{type:'jumpingJack', bottom:0, left:21},
{type:'jumpingJack', bottom:3, left:24},
{type:'jumpingJack', bottom:6, left:27}
]
};
manager.storeLevels(myLevel);
gma.keyHandler.register(37, manager.character.move.curry(gma.constants.LEFT));
gma.keyHandler.register(39, manager.character.move.curry(gma.constants.RIGHT));
gma.keyHandler.register(32, manager.character.jump);
manager.init();
}
);