绘制简单的塞尔达风格的主界面
需要绘制的位置交给外部参数来定义。
先根据需要绘制的总长度,退后留出空间,再使用repeat()语句来重复绘制即可,绘制的次数根据当前生命值和最大生命值决定,每次循环变量x的位置发生变化,先绘制当前血量,再绘制空血量,注意_x在第一个repeat中已经被修改了,下个repeat再次调用的时候, _x变量已经到了绘制好已有血量的绘制了。
-------------------绘制血条代码----------------------------
/// @description DrawLifeHearts(x, y);
/// @function DrawLifeHearts
/// @param x
/// @param y
//
//*****************************************************************************
// Position
var _x, _y;
_x = argument0;
_y = argument1;
// Title
//draw_text(_x-88, _y, "----- LIFE -----");
// Draw current life
_x -= 36*5;
//_y += 32;
repeat (life)
{
draw_sprite(sprLifeHeart, 0, _x, _y);
_x += 36;
}
// Draw remaining empty hearts
repeat (hearts-life)
{
draw_sprite(sprLifeHeart, 1, _x, _y);
_x += 36;
}
2.绘制装备图标
绘制的位置交由外部参数来决定,脚本做绘制处理
先绘制背景,再使用draw_sprite_stretched()来绘制固定大小48*48的图片
其中_icon是用来储存精灵名称的变量
ITEM_ICON是定义好的全局数字变量,使用它来索引objPlayer.equippedWeapon列表内精灵名称并返回给_icon
var _icon;
_icon = objPlayer.equippedWeapon[ITEM_ICON];
if (_icon != -1)
draw_sprite_stretched(_icon, 0, _x-24, _y-24, 48, 48);
-------绘制装备图标代码-------------
/// @description DrawEquippedWeapon(x, y);
/// @function DrawEquippedWeapon
/// @param x
/// @param y
//
// This function draws the currently equipped weapon in the given position
// on the HUD.
//
//*****************************************************************************
// Get stuff
var _x, _y;
_x = argument0;
_y = argument1;
// Draw empty slot
draw_sprite(sprIconCircle, 0, _x, _y);
// Draw item
var _icon;
_icon = objPlayer.equippedWeapon[ITEM_ICON];
if (_icon != -1)
draw_sprite_stretched(_icon, 0, _x-24, _y-24, 48, 48);
3.绘制积分和硬币
、
先绘制硬币图片,再绘制文本。文本水平居中设置为左边,并且使用的string_hash_to_newline(coins)函数,这个函数支持转义字符#号来换行。
“hello#world”
hello
world
---------------绘制硬币代码----------------------
/// @description DrawCoinsCounter(x, y);
/// @function DrawCoinsCounter
/// @param x
/// @param y
//
//*****************************************************************************
var _x, _y;
_x = argument0;
_y = argument1;
draw_sprite(sprCoinCounter, 0, _x+8, _y+4);
draw_set_halign(fa_left);
draw_text(_x+32, _y+4,string_hash_to_newline(coins));
4.描边文字
lengthdir_x(len,dir)返回由长度和方向决定的向量的水平分量。
_borderWidth实际上是作为一个描边的宽度来使用,先在0,120,240度三个方向绘制描述颜色的文字,注意进行偏移时,使用lengthdir_x和lengthdir_y函数。然后再在原地绘制显示文字覆盖上面的文字,这样就会有一个外描边的效果了。
-------------描边代码-----------------------------
/// @description draw_text_outline(x, y, string, borderWidth, fillColor, borderColor);
/// @function draw_text_outline
/// @param x
/// @param y
/// @param string
/// @param borderWidth
/// @param fillColor
/// @param borderColor
//
// Draws text with a border. Fill and border can be coloured separately.
// Note that this script has a different naming convention to other scripts, but
// that's so it's more in line with the text functions it's meant to extend upon.
//
//*****************************************************************************
// Get stuff
var _dir, _x, _y, _borderWidth, _fillColor, _borderColor;
_borderWidth = argument3;
_fillColor = argument4;
_borderColor = argument5;
// Draw border
draw_set_color(_borderColor);
for (_dir=0; _dir<360; _dir+=360/3)
{
_x = argument0+lengthdir_x(_borderWidth, _dir);
_y = argument1+lengthdir_y(_borderWidth, _dir);
draw_text(_x, _y, string_hash_to_newline(argument2));
}
// Draw inner text
draw_set_color(_fillColor);
draw_text(argument0, argument1, string_hash_to_newline(argument2));