泰拉瑞拉飾品制作方法
時間:2014-02-18 16:36:04 來源:k73電玩之家 作者:小新 熱度: 134 次
《泰拉瑞拉》的飾品制作方法其實還是有一些麻煩的,玩家們初上手制作可能會遇到一些困難,不過我想這些都不是玩家們想要制作飾品的阻礙,希望以下的飾品的制作方法,可以讓玩家們在這款游戲中可以獲得更多的樂趣。
6.3.效果圖:
BURN BABY,BURN!
嗯……本期教程就此結束,下期將是:【獵奇篇:讀取操作】,如何用飾品給予玩家可控的額外火力,盡請期待~
附思考題:
如何做出十動然拒徽章的效果?(排除危險NPC和proj到安全距離以外)(neta自擁著轉)
提示:
①proj對應的組是Main.projectile,proj的類型是Projectile
②proj和NPC一樣有位置和寬高數(shù)據(jù),位置可以被任意操作
③敵對NPC特征是friendly邏輯值為假,敵對proj特征是hostile邏輯值為真
【獵奇篇:讀取操作】
前言:
其實這一篇嚴格地說并不是為增強火力而存在的;換句話說,它不只是為增強火力存在的。
只要讀取了電腦前玩家的操作,加上自定的一些代碼,玩家就可以做到擴展整個人物的功能,就像K鍵召喚所有BOSS,F(xiàn)鍵瞬移,等等……
下面是正題:
1.讀取玩家行動
讀取玩家行動,其實只需熟記表示玩家狀態(tài)的幾個邏輯值,就能對玩家相應的行動做到加強或改變;平時需要用的基本就是這幾條了:
controlLeft;控制向左
controlRight;控制向右
controlUp;控制向上
controlDown;控制向下
controlJump;控制跳
controlHook;控制鉤子
例:如何做一個讓玩家移動速度加快的飾品?
大體思路就是讀取玩家按下的方向鍵,并相應地適當改變玩家速度,如下:
if (p.controlLeft)
{
if (p.velocity.X > 0) p.velocity.X *= 0.95f;
else if (p.velocity.X > -30) p.velocity.X -= p.velocity.Y == 0 ? 0.5f : 1f;
}
if (p.controlRight)
{
if (p.velocity.X < 0) p.velocity.X *= 0.95f;
else if (p.velocity.X < 30) p.velocity.X += p.velocity.Y == 0 ? 0.5f : 1f;
}
if (p.controlUp)
{
p.controlJump = true;
if (p.velocity.Y > 0) p.velocity.Y *= 0.95f;
else if (p.velocity.Y > -30) p.velocity.Y -= 1f;
}
以上的作用是:玩家控制向左時就增加向左速度,玩家控制向右就增加向右速度;將控制向上和控制跳躍綁定,控制向上就增加向上的速度
2.讀取鼠標狀態(tài)
游戲中自帶顯示鼠標狀態(tài)的邏輯值,Main.mouseLeft和Main.mouseRight分別表示鼠標左鍵和右鍵是否按下;相應的還有Main.mouseLeftRelease和Main.mouseRightRelease表示左右鍵是否未按下,可以理解為兩者相反
思考題:如何制作按下鼠標右鍵就回血的飾品?運用前面的教程,題目較為簡單,這里就不寫示例了
3.讀取鍵盤狀態(tài)
Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.【按鍵代號】)
這個語句用來讀取鍵盤狀態(tài),如果當前按下了指定【按鍵代號】的鍵就等于真;反之,假。一般來說,提取字母鍵的狀態(tài)只需把按鍵代號寫成相應大寫字母;F1-F12也是直接寫大寫F加數(shù)字就可以了
【獵奇+篇:輔助火力】
提示:這一篇將會有大量的英語和數(shù)學成分,不過LZ相信你們會比上學期英語倒10的LZ看得更明白的~
當然最開始還是喜聞樂見地分條講解代碼:
1.Projectile.NewProjectile(坐標X,坐標Y,速度X,速度Y,種類,傷害,擊退,所屬玩家,ai0,ai1)
字面意思,用來在世界里生成一個proj,中心對準給定的坐標,速度為給定速度,種類、傷害、擊退等等都是可以指定的,所屬玩家一般寫Main.myPlayer或者p.whoAmI(當自己被編號為p時)至于那個ai0和ai1,目前還不需要它們,在寫的時候可以純粹省略這兩項,或者填0
這句話可以說是附加火力的核心,沒有它一切都是免談,想象一下,對準怪物按下鼠標,想讓火球飛過去就飛火球,想飛激光就飛激光……
橋豆麻袋!電腦怎么知道你想讓那個proj飛到哪里去?下面是一些有關確定速度方向的講解:
①三角函數(shù)天才,或者平面向量萬年掛科,請前往條目2
②平面向量學霸或者痛恨三角函數(shù),請前往條目3
1.1.先確定自己和鼠標的位置吧~
Vector2 pc=p.position+new Vector2(p.width,p.height)/2;
Vector2 mc=Main.screenPosition+new Vector2(Main.mouseX,Main.mouseY);
2.Math.Atan2(對邊,斜邊)
兩個向量作差,得到了什么?向量?錯!是直角三角形!
float r=(float)Math.Atan2(mc.Y-pc.Y,mc.X-pc.X);
(這個函數(shù)是反正切,又不是反正切,因為它的對邊和斜邊隨便哪個取0都是可以輸出結果的;而且它的值域是2π,也就是一圈!)
接下來,Vector2 v=new Vector2((float)Math.Cos(r),(float)Math.Sin(r));
這就是單位長度,方向從玩家中心指向鼠標的速度向量
3.Vector2.Distance(向量1,向量2)
這個語句是用來求兩個向量距離的,同樣的效果也可以用求向量長度的語句((向量1-向量2).Length())來實現(xiàn)
Q:沒事求向量長度干啥?
A:向量除以長度等于單位向量
也就是:Vector2 v=(mc-pc)/Vector2.Distance(mc,pc);
一發(fā)♂入魂的單位向量~
下面就可以組裝起來了:
Vector2 pc=p.position+new Vector2(p.width,p.height)/2;
Vector2 mc=Main.screenPosition+new Vector2(Main.mouseX,Main.mouseY);
Vector2 v=(mc-pc)/Vector2.Distance(mc,pc);
Projectile.NewProjectile(pc.X,pc.Y,v.X*6,v.Y*6,255,50,0,p.whoAmI);
示例中為使用單位向量法,速度大小為6,傷害為50,無擊退的磁球激光
直接寫進去?不不不那樣會鬼畜的,激光還好,如果寫的是雷♂管之類的和諧物品的話,想象一下每秒60個雷♂管不受控制地射出去的景象……
我要評論 查看全部評論 (0)>>