使用GameMakerStudio2制作《雪山兄弟》學(xué)習(xí)總結(jié)

本篇為觀看up主紅色激情的教學(xué)視頻所寫的總結(jié) 視頻地址:
導(dǎo)入資源
導(dǎo)入到GMS2,導(dǎo)入方式同《功夫》那篇相同。
新建房間,添加墻體、前景,激活視野,墻體的制作
創(chuàng)建room,載入背景圖片 在載入背景圖片前需要新建一個(gè)新的背景圖層,并設(shè)置為黑色,不然行走時(shí)會(huì)有殘影留在屏幕中 新建一個(gè)用來(lái)存墻體對(duì)象的group,新建一個(gè)父類對(duì)象obj_father,再創(chuàng)建七個(gè)繼承這個(gè)父類的墻體對(duì)象,根據(jù)精靈創(chuàng)建。 在房間中繪制地圖,并激活視野:
相機(jī)屬性Width256,Height240,Ypos160 視口屬性就寬高*4即可Width1024,Height960 *
創(chuàng)建玩家,設(shè)置基本屬性
創(chuàng)建obj_player,精靈設(shè)置為spr_player_stand 添加創(chuàng)建事件
?face=1;//方向1右 -1左
?jump=0;//跳躍0 1
?//jumpface=0;//跳躍方向-1 0 1
?state=0;//狀態(tài)0移動(dòng) 1出招 2收招
?timer=0;//狀態(tài)計(jì)時(shí)器
?hp=9;//血
?//***固有
?image_speed=0;//動(dòng)畫速度=0
玩家左右移動(dòng),坐標(biāo)限制
為obj_player添加步事件
?//***臨時(shí)變量
?var dx,psp,tmp;
?dx=0;//左右按鍵狀態(tài)
?psp=0.75;//移動(dòng)速度
?//***按鍵判斷
?if(state==0&&jump==0)
?{
? //右移動(dòng)
? if(keyboard_check(ord("D")))
? {
? ?dx=1;
? ?sprite_index=spr_player_walk;
? ?image_index+=0.25;
? ?face=1;
? }
? else//***左移動(dòng)
? if(keyboard_check(ord("A")))
? {
? ?dx=-1;
? ?sprite_index=spr_player_walk;
? ?image_index+=0.25;
? ?face=-1;
? }
? else sprite_index=spr_player_stand;
?}
?//***坐標(biāo)變化
?x+=dx*psp;
?//方向變化
?if(dx!=0)image_xscale=face;
?//***坐標(biāo)限制
?if(x<0)x=room_width;
?if(x>room_width)x=0;
下砸動(dòng)作狀態(tài)實(shí)現(xiàn)
在步事件中將下砸代碼添加到按鍵判斷代碼區(qū)塊中:
?//***下砸
? if(keyboard_check_pressed(ord("J")))
? {
? ?state=1;
? ?timer=15;//動(dòng)作持續(xù)15幀
? ?sprite_index=spr_player_chui;
? }
將敲擊判斷放在按鍵判斷代碼區(qū)塊下方:
?//***敲擊判斷
?if(state==1)
?{
? image_index+=0.2;
? //***敲擊結(jié)束
? if(timer<=0)
? {
? ?state=0;
? ?sprite_index=spr_player_stand;
? }
? //***敲擊結(jié)束
? tmp=collision_rectangle(x-12,y,x+12,y-28,obj_haishi,0,0);//需創(chuàng)建haishi對(duì)象
? if(tmp)
? if(tmp.state==0)
? {
? ? tmp.state=1;
? ? audio_play_sound(snd_chui,0,false);
? }
? timer-=1;
?}
創(chuàng)建海獅對(duì)象(obj_haishi),精靈為haishi_walk
跳躍動(dòng)作,速度限制
將跳躍代碼段加入按鍵檢測(cè)代碼塊中,并且不能和下砸同時(shí)按因此需加else,下砸代碼上面已經(jīng)加過(guò)了
? //***下砸
? if(keyboard_check_pressed(ord("J")))
? {
? ?state=1;
? ?timer=15;//動(dòng)作持續(xù)15幀
? ?sprite_index=spr_player_chui;
? }
? else//***跳躍
? if(keyboard_check_pressed(ord("K")))
? {
? ?face=dx;
? ?jump=1;
? ?direction=90;
? ?speed=4.5;
? ?gravity=0.2;
? ?audio_play_sound(snd_jump,0,false);
? ?sprite_index=spr_player_jump;
? }
在按鍵檢測(cè)區(qū)塊下面添加跳躍檢測(cè),obj_break還沒(méi)建,在后面會(huì)創(chuàng)建,如需檢測(cè)跳躍,可先創(chuàng)建個(gè)對(duì)象,先不加代碼,brk是obj_break的成員變量
?//***跳躍檢測(cè)
?if(jump==1)
?{
? x+=face*0.4;
? if(speed>8)speed=8;
? //***上跳判斷
? if(direction==90)
? {
? ?//***動(dòng)畫轉(zhuǎn)換
? ?if(speed<1)
? ?{
? ? image_index=1;
? ?}
? ?//***敲墻檢測(cè)
? ?tmp=collision_point(x,y-24,obj_wall_father,0,0);
? ?if(tmp)
? ?{
? ? //***被敲碎
? ? ?if(tmp.sprite_index!=spr_wall_wudi)
? ? ?{
? ? ?var tmp2;
? ? ?tmp2=instance_create_depth(tmp.x,tmp.y,100,obj_break);
? ? ?tmp2.sprite_index=tmp.brk;
? ? ?tmp2.face=image_xscale;
? ? ?with(tmp)instance_desttroy();
? ? ?}
? ? ?audio_play_sound(snd_ding,0,false);
? ? ?speed=0;
? ? ?image_index=1;
? ?}
? }
?}
落地判斷
在跳躍檢測(cè)代碼塊中加入下落檢測(cè)
?//***下落檢測(cè)
? if(direction==270)
? {
? ?//***跳躍中改變方向
? ?if(face==0)
? ?{
? ? if(keyboard_check(ord("A"))){face=-1;image_xscale=-1;}
? ? if(keyboard_check(ord("D"))){face=1;image_xscale=1;}
? ?}
? ?//***落地判斷
? ?tmp=collision_point(x,y,obj_wall_father,0,0);
? ?if(tmp)
? ?{
? ? jump=0;
? ? speed=0;
? ? gravity=0;
? ? y=tmp.y-1;
? ? sprite_index=spr_player_stand;
? ?}
? }
創(chuàng)建碎磚
創(chuàng)建對(duì)象obj_break,添加創(chuàng)建事件
?face=0;
?direction=90;//方向
?speed=3;
?gravity=0.2;//重力
?image_speed=0.2;//動(dòng)畫速度
添加步事件
x+=face;
添加其它事件->視野(view)->外部視野0(outside view 0)
instance_destroy(obj_break);
墻體對(duì)應(yīng)碎磚的邏輯
之后為每個(gè)可被敲碎墻體對(duì)象添加創(chuàng)建事件,添加一行相似代碼,如obj_wall_10
brk=spr_break_10;
頂磚判斷
代碼在上面跳躍檢測(cè)中已添加好
腳下為空檢測(cè)
在敲擊判斷代碼塊下方添加腳下判斷代碼塊
//***腳下判斷
if(jump==0)
{
tmp=collision_point(x,y+1,obj_wall_father,0,0);
if(!tmp)
{
jump=1;
gravity=0.2;
sprite_index=spr_player_jump;
image_index=1;
}
}
視野控制
此處我沒(méi)有按照教程視頻中的視野跟隨,第一是因?yàn)镚MS2中沒(méi)有view_yveiw這個(gè)數(shù)組了,我試了試view_yport和view_hport,但都沒(méi)有什么效果,于是我就在房間編輯器中房間屬性里的視野屬性(viewport properties)設(shè)置了跟蹤,將垂直邊界(vertical border)設(shè)了100,個(gè)人感覺效果還好,就是下落時(shí)感覺稍微有點(diǎn)快。
背景音樂(lè)
創(chuàng)建對(duì)象obj_ctrl,添加創(chuàng)建事件
audio_stop_all();
audio_play_sound(snd_music,0,true);
海獅與移動(dòng)
為obj_haishi添加創(chuàng)建事件
face=1;
state=0;
image_speed=0.2;
添加步事件,我這里和教程不太一樣,我添加了下落檢測(cè)
//***死亡
if(state==1)
{
gravity=0.2;
sprite_index=spr_haishi_dead;
exit;
}
//***自動(dòng)移動(dòng)
x+=face*0.3;
if(x<0)x=room_width;
if(x>room_width)x=0;
//***腳下判斷
if(collision_point(x-1,y+1,obj_wall_father,0,0))
{
gravity=0;
speed=0;
y=collision_point(x-1,y+1,obj_wall_father,0,0).y-1;
}
if(!collision_point(x-2,y+1,obj_wall_father,0,0)&&!collision_point(x+2,y+1,obj_wall_father,0,0))
{
gravity=0.2;
sprite_index=spr_haishi_walk;
image_index=2;
}
if(!collision_point(x-1,y+1,obj_wall_father,0,0)&&!collision_point(x+1,y+1,obj_wall_father,0,0))
{
face=-face;
}
//***改變方向
image_xscale=face;
添加Other->Outsideroom事件
instance_destroy();
打海獅與碰到海獅
打海獅在上面下砸檢測(cè)時(shí)已經(jīng)添加,接下來(lái)添加碰到海獅,在敲擊判斷下添加
else//***碰撞海獅
{
tmp=collision_rectangle(x-8,y,x+8,y-16,obj_haishi,0,0);
if(tmp)
if(tmp.state==0)
{
state=-1;
sprite_index=spr_player_dead;
image_speed=0.2;
speed=2;
gravity=0.2
direction=90;
audio_play_sound(snd_dead,0,false);
}
}

結(jié)語(yǔ)
至此,教程內(nèi)容已經(jīng)結(jié)束,視頻最后對(duì)海獅左右搖擺bug的修復(fù)在海獅與移動(dòng)的步事件中已經(jīng)修改即添加了下落檢測(cè),素材包里還有其他沒(méi)用過(guò)的精靈,將來(lái)有機(jī)會(huì)再添加8,繼續(xù)塔塔開了。