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

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

請拿手機掃描此QRCODE

傳到手機看

2021-12-31

廣告

【獵奇+篇:控制法】

前方大量聲明,注意

要控制火力嘛……不然會鬼畜不是嗎?所以這裡就能利用上前面說的讀取鍵盤狀態了

這裡可以分為幾類觸發機制,以下用F鍵作為例子

0.特別說明

務必加上p.whoAmI==Main.myPlayer的判定,如果你不想自己按鍵時全圖玩家都開始放彈幕,想像一下全圖按鍵會發生什麽

1.單發

原理是記錄上一幀的F鍵狀態,如果兩個狀態不同,代表按下(彈起)了F,鍵,就可以放彈幕了

廣告

具體:

using System;

using TAPI;

using Microsoft.Xna.Framework;

namespace TAPI.【MOD名稱】{

public class 【道具名稱】:ModItem{

public 【道具名稱】(ModBase modbase,Item i):base(modbase,i){}

bool oldF=false;

public override void Effects(Player p){

if(p.whoAmI==Main.myPlayer&&!oldF&&Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.F)){

  //這裡面就是寫前面發射子彈程式碼的地方

}

oldF=Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.F;

}

}

這種觸發方式的頻率是取決於按鍵速度的,也就是按得越快射♂得越快,理論射速峰值為30發每秒

2.連發

原理是添加一個計時變量,至於具體怎麽計時就看個人喜好了,這裡提供一種解決方案:

using System;

using TAPI;

using Microsoft.Xna.Framework;

namespace TAPI.【MOD名稱】{

public class 【道具名稱】:ModItem{

public 【道具名稱】(ModBase modbase,Item i):base(modbase,i){}

int timer=0;

public override void Effects(Player p){

if(timer>0)timer--;

else{

  if(p.whoAmI==Main.myPlayer&&Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.F)){

    timer=10;

    //這裡面就是寫前面發射子彈程式碼的地方

  }

}

}

}

按住F就可以連射了~示例為每秒觸發6次的寫法

3.自動

這裡就略複雜了點,需要具有想像力以及數學功底,當然還有對於彈幕的熱愛=w=

簡單地來一個施放旋轉鐮刀的腳本吧~

using System;

using TAPI;

using Microsoft.Xna.Framework;

namespace TAPI.ctx{

 public class ctxbullet : ModItem{

int timer = 0;

float r = 0;

float rv = 0;

float ra = 0.001f;

bool barrage = false;

public ctxbullet(ModBase modbase, Item i) : base(modbase, i) { }

public override void Effects(Player p){

 rv += ra;

 if (rv > 3) rv -= (float)Math.PI * 2f;

 r += rv;

 if (r > 3) r -= (float)Math.PI * 2f;

 timer++;

 if (timer > 3) timer -= 3;

 if (barrage){

if (p.statMana < 3 || p.whoAmI != Main.myPlayer){

 barrage = false;

 goto outOfMana;

}

else p.statMana -= 3;

if (timer % 3 == 0){

 Vector2 pc = p.position + new Vector2(p.width, p.height) / 2;

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

 Projectile.NewProjectile(pc.X, pc.Y, v.X * 20f, v.Y * 20f, 274, 100, 0, p.whoAmI);

 Projectile.NewProjectile(pc.X, pc.Y, -v.X * 20f, -v.Y * 20f, 274, 100, 0, p.whoAmI);

}

 }

outOfMana:

 if (Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.F)) barrage = !barrage;

}

 }

}

因為需要美觀,就多定義了幾個角度增速,角度加速度,角度急動度,角度痙攣度神馬的……

效果圖:

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

(所以說彈幕可以培養數學和想像力=w=)

當然,自動類彈幕的形式是非常多的,從上文簡單的噴環環,到折返射、西行寺無餘涅盤、夢想天生、原子崩壞、金剛槍破,等等……只要看懂彈幕的組成,tAPI就能寫出來!

嘛……作為飾品部分的教學基本已經結束了,從道具json的創建一直到在cs裡聲明和操作變量,基本現在已經可以復原所有原版飾品的效果了,玩家們也能首夜裸裝站擼機械三王了

更多相關資訊請關注:專題


來源:遊俠網

廣告

廣告

遊戲資訊

泰拉瑞亞 (Terraria)

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

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

更多 泰拉瑞亞 攻略|新聞

廣告
【獵奇+篇:控制法】 https://gamemad.com/guide/162086 前方大量聲明,注意 要控制火力嘛……不然會鬼畜不是嗎?所以這裡就能利用上前面說的讀取鍵盤狀態了 這裡可以分為幾類觸發機制,以下用F鍵作為例子 0.特別說明 務必加上p.whoAmI==Main.myPlayer的判定,如果你不想自己按鍵時全圖玩家都開始放彈幕,想像一下全圖按鍵會發生什麽 1.單發 原理是記錄上一幀的F鍵狀態,如果兩個狀態不同,代表按下(彈起)了F,鍵,就可以放彈幕了 具體: using System; using TAPI; using Microsoft.Xna.Framework; namespace TAPI.【MOD名稱】{ public class 【道具名稱】:ModItem{ public 【道具名稱】(ModBase modbase,Item i):base(modbase,i){} bool oldF=false; public override void Effects(Player p){ if(p.whoAmI==Main.myPlayer&&!oldF&&Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.F)){   //這裡面就是寫前面發射子彈程式碼的地方 } oldF=Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.F; } } } 這種觸發方式的頻率是取決於按鍵速度的,也就是按得越快射♂得越快,理論射速峰值為30發每秒 2.連發 原理是添加一個計時變量,至於具體怎麽計時就看個人喜好了,這裡提供一種解決方案: using System; using TAPI; using Microsoft.Xna.Framework; namespace TAPI.【MOD名稱】{ public class 【道具名稱】:ModItem{ public 【道具名稱】(ModBase modbase,Item i):base(modbase,i){} int timer=0; public override void Effects(Player p){ if(timer>0)timer--; else{   if(p.whoAmI==Main.myPlayer&&Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.F)){     timer=10;     //這裡面就是寫前面發射子彈程式碼的地方   } } } } } 按住F就可以連射了~示例為每秒觸發6次的寫法 3.自動 這裡就略複雜了點,需要具有想像力以及數學功底,當然還有對於彈幕的熱愛=w= 簡單地來一個施放旋轉鐮刀的腳本吧~ using System; using TAPI; using Microsoft.Xna.Framework; namespace TAPI.ctx{  public class ctxbullet : ModItem{ int timer = 0; float r = 0; float rv = 0; float ra = 0.001f; bool barrage = false; public ctxbullet(ModBase modbase, Item i) : base(modbase, i) { } public override void Effects(Player p){  rv += ra;  if (rv > 3) rv -= (float)Math.PI * 2f;  r += rv;  if (r > 3) r -= (float)Math.PI * 2f;  timer++;  if (timer > 3) timer -= 3;  if (barrage){ if (p.statMana < 3 || p.whoAmI != Main.myPlayer){  barrage = false;  goto outOfMana; } else p.statMana -= 3; if (timer % 3 == 0){  Vector2 pc = p.position + new Vector2(p.width, p.height) / 2;  Vector2 v = new Vector2((float)Math.Cos(r), (float)Math.Sin(r));  Projectile.NewProjectile(pc.X, pc.Y, v.X * 20f, v.Y * 20f, 274, 100, 0, p.whoAmI);  Projectile.NewProjectile(pc.X, pc.Y, -v.X * 20f, -v.Y * 20f, 274, 100, 0, p.whoAmI); }  } outOfMana:  if (Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.F)) barrage = !barrage; }  } } 因為需要美觀,就多定義了幾個角度增速,角度加速度,角度急動度,角度痙攣度神馬的…… 效果圖: https://img1.gamemad.com/2021/12/31/uk8tTjQw.gif (所以說彈幕可以培養數學和想像力=w=) 當然,自動類彈幕的形式是非常多的,從上文簡單的噴環環,到折返射、西行寺無餘涅盤、夢想天生、原子崩壞、金剛槍破,等等……只要看懂彈幕的組成,tAPI就能寫出來! 嘛……作為飾品部分的教學基本已經結束了,從道具json的創建一直到在cs裡聲明和操作變量,基本現在已經可以復原所有原版飾品的效果了,玩家們也能首夜裸裝站擼機械三王了 更多相關資訊請關注:專題 來源:遊俠網
https://gamemad.com/guide/162086
0