《泰拉瑞亞》飾品製作方法 (4) - 遊戲狂
廣告

《泰拉瑞亞》飾品製作方法 (4)

請拿手機掃描此QRCODE

傳到手機看

2021-12-31

廣告

6.3.效果圖:

 《泰拉瑞亞》飾品製作方法

廣告

BURN BABY,BURN!

嗯……本期教學就此結束,下期將是:【獵奇篇:讀取操作】,如何用飾品給予玩家可控的額外火力,盡請期待~

附思考題:

如何做出十動然拒徽章的效果?(排除危險NPC和proj到安全距離以外)(neta自擁著轉)

提示:

①proj對應的組是Main.projectile,proj的類型是Projectile

②proj和NPC一樣有位置和寬高資料,位置可以被任意操作

③敵對NPC特徵是friendly邏輯值為假,敵對proj特徵是hostile邏輯值為真

【獵奇篇:讀取操作】

前言:

其實這一篇嚴格地說並不是為增強火力而存在的;換句話說,它不只是為增強火力存在的。

只要讀取了電腦前玩家的操作,加上自定的一些程式碼,玩家就可以做到擴展整個人物的功能,就像K鍵召喚所有Boss,F鍵瞬移,等等……

下面是正題:

1.讀取玩家行動

讀取玩家行動,其實只需熟記表示玩家狀態的幾個邏輯值,就能對玩家相應的行動做到加強或改變;平時需要用的基本就是這幾條了:

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.讀取滑鼠狀態

遊戲中自帶顯示滑鼠狀態的邏輯值,Main.mouseLeft和Main.mouseRight分別表示滑鼠左鍵和右鍵是否按下;相應的還有Main.mouseLeftRelease和Main.mouseRightRelease表示左右鍵是否未按下,可以理解為兩者相反

思考題:如何製作按下滑鼠右鍵就回血的飾品?運用前面的教學,題目較為簡單,這裡就不寫示例了

3.讀取鍵盤狀態

Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.【按鍵代號】)

這個語句用來讀取鍵盤狀態,如果當前按下了指定【按鍵代號】的鍵就等於真;反之,假。一般來說,提取字母鍵的狀態只需把按鍵代號寫成相應大寫字母;F1-F12也是直接寫大寫F加數字就可以了

【獵奇+篇:輔助火力】

提示:這一篇將會有大量的英語和數學成分,不過LZ相信你們會比上學期英語倒10的LZ看得更明白的~

當然最開始還是喜聞樂見地分條講解程式碼:

1.Projectile.NewProjectile(坐標X,坐標Y,速度X,速度Y,種類,傷害,擊退,所屬玩家,ai0,ai1)

字面意思,用來在世界裡生成一個proj,中心對準給定的坐標,速度為給定速度,種類、傷害、擊退等等都是可以指定的,所屬玩家一般寫Main.myPlayer或者p.whoAmI(當自己被編號為p時)至於那個ai0和ai1,目前還不需要它們,在寫的時候可以純粹省略這兩項,或者填0

這句話可以說是附加火力的核心,沒有它一切都是免談,想像一下,對準怪物按下滑鼠,想讓火球飛過去就飛火球,想飛雷射就飛雷射……

橋豆麻袋!電腦怎麽知道你想讓那個proj飛到哪裡去?下面是一些有關確定速度方向的講解:

①三角函數天才,或者平面向量萬年掛科,請前往條目2

②平面向量學霸或者痛恨三角函數,請前往條目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);

(這個函數是反正切,又不是反正切,因為它的對邊和斜邊隨便哪個取0都是可以輸出結果的;而且它的值域是2π,也就是一圈!)

接下來,Vector2 v=new Vector2((float)Math.Cos(r),(float)Math.Sin(r));

這就是單位長度,方向從玩家中心指向滑鼠的速度向量

3.Vector2.Distance(向量1,向量2)

這個語句是用來求兩個向量距離的,同樣的效果也可以用求向量長度的語句((向量1-向量2).Length())來實現

Q:沒事求向量長度幹啥?

A:向量除以長度等於單位向量

也就是:Vector2 v=(mc-pc)/Vector2.Distance(mc,pc);

一發♂入魂的單位向量~

下面就可以組裝起來了:

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個雷♂管不受控制地射出去的景象……


來源:遊俠網

廣告

廣告

遊戲資訊

泰拉瑞亞 (Terraria)

類別: 冒險
平台: PC, PS4, XboxONE, Switch, 蘋果, 安卓
開發: Re-Logic
發行: Re-Logic
上市: 2011年05月17日

《泰拉瑞亞(Terraria)》是一款由Re-Logic製作並發行的動作冒險類遊戲,玩家可以在遊戲中做很多事情:製造武器戰勝各種各樣的敵人及群落;挖掘地下尋找器材配件、金錢和其他有用的東西;收集木材,石材,礦石等資源;用世界裡的一切創造你需要的東西並守護它。

更多 泰拉瑞亞 攻略|新聞

廣告
6.3.效果圖: https://gamemad.com/guide/162085   https://img1.gamemad.com/2021/12/31/j9VcD7J3.jpg BURN BABY,BURN! 嗯……本期教學就此結束,下期將是:【獵奇篇:讀取操作】,如何用飾品給予玩家可控的額外火力,盡請期待~ 附思考題: 如何做出十動然拒徽章的效果?(排除危險NPC和proj到安全距離以外)(neta自擁著轉) 提示: ①proj對應的組是Main.projectile,proj的類型是Projectile ②proj和NPC一樣有位置和寬高資料,位置可以被任意操作 ③敵對NPC特徵是friendly邏輯值為假,敵對proj特徵是hostile邏輯值為真 【獵奇篇:讀取操作】 前言: 其實這一篇嚴格地說並不是為增強火力而存在的;換句話說,它不只是為增強火力存在的。 只要讀取了電腦前玩家的操作,加上自定的一些程式碼,玩家就可以做到擴展整個人物的功能,就像K鍵召喚所有Boss,F鍵瞬移,等等…… 下面是正題: 1.讀取玩家行動 讀取玩家行動,其實只需熟記表示玩家狀態的幾個邏輯值,就能對玩家相應的行動做到加強或改變;平時需要用的基本就是這幾條了: 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.讀取滑鼠狀態 遊戲中自帶顯示滑鼠狀態的邏輯值,Main.mouseLeft和Main.mouseRight分別表示滑鼠左鍵和右鍵是否按下;相應的還有Main.mouseLeftRelease和Main.mouseRightRelease表示左右鍵是否未按下,可以理解為兩者相反 思考題:如何製作按下滑鼠右鍵就回血的飾品?運用前面的教學,題目較為簡單,這裡就不寫示例了 3.讀取鍵盤狀態 Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.【按鍵代號】) 這個語句用來讀取鍵盤狀態,如果當前按下了指定【按鍵代號】的鍵就等於真;反之,假。一般來說,提取字母鍵的狀態只需把按鍵代號寫成相應大寫字母;F1-F12也是直接寫大寫F加數字就可以了 【獵奇+篇:輔助火力】 提示:這一篇將會有大量的英語和數學成分,不過LZ相信你們會比上學期英語倒10的LZ看得更明白的~ 當然最開始還是喜聞樂見地分條講解程式碼: 1.Projectile.NewProjectile(坐標X,坐標Y,速度X,速度Y,種類,傷害,擊退,所屬玩家,ai0,ai1) 字面意思,用來在世界裡生成一個proj,中心對準給定的坐標,速度為給定速度,種類、傷害、擊退等等都是可以指定的,所屬玩家一般寫Main.myPlayer或者p.whoAmI(當自己被編號為p時)至於那個ai0和ai1,目前還不需要它們,在寫的時候可以純粹省略這兩項,或者填0 這句話可以說是附加火力的核心,沒有它一切都是免談,想像一下,對準怪物按下滑鼠,想讓火球飛過去就飛火球,想飛雷射就飛雷射…… 橋豆麻袋!電腦怎麽知道你想讓那個proj飛到哪裡去?下面是一些有關確定速度方向的講解: ①三角函數天才,或者平面向量萬年掛科,請前往條目2 ②平面向量學霸或者痛恨三角函數,請前往條目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); (這個函數是反正切,又不是反正切,因為它的對邊和斜邊隨便哪個取0都是可以輸出結果的;而且它的值域是2π,也就是一圈!) 接下來,Vector2 v=new Vector2((float)Math.Cos(r),(float)Math.Sin(r)); 這就是單位長度,方向從玩家中心指向滑鼠的速度向量 3.Vector2.Distance(向量1,向量2) 這個語句是用來求兩個向量距離的,同樣的效果也可以用求向量長度的語句((向量1-向量2).Length())來實現 Q:沒事求向量長度幹啥? A:向量除以長度等於單位向量 也就是:Vector2 v=(mc-pc)/Vector2.Distance(mc,pc); 一發♂入魂的單位向量~ 下面就可以組裝起來了: 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個雷♂管不受控制地射出去的景象…… 來源:遊俠網
https://gamemad.com/guide/162085
0