GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

192 信息 1091 成员
游戏开发工具 GameMaker Studio 2 的讨论小组

绘制简单的塞尔达风格的主界面

Linpean 2017-06-22
1.绘制血条

需要绘制的位置交给外部参数来定义。

先根据需要绘制的总长度,退后留出空间,再使用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));


近期喜欢的会员

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册