【獵奇+篇:控制法】
前方大量聲明,注意
要控制火力嘛……不然會鬼畜不是嗎?所以這裡就能利用上前面說的讀取鍵盤狀態了
這裡可以分為幾類觸發機制,以下用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裡聲明和操作變量,基本現在已經可以復原所有原版飾品的效果了,玩家們也能首夜裸裝站擼機械三王了
更多相關資訊請關注:專題
來源:遊俠網