首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 開發 WPF/Silverlight 動畫與遊戲系列教程(三十二):六大魔法屬性系統

     編輯:關於C#

前言

本節演示如何為遊戲魔法增加華麗附加屬性,涵蓋當前網遊最主流的六大屬性。

規則定義

1. 六大屬性分類與效果

屬性中文效果視覺色相
雷麻痺精靈無法動彈雪白
混混亂精靈亂跑黃色
冰冰凍移動/攻擊/施法速度減緩天藍
毒中毒每秒持續掉血綠色
火燃燒所有防禦屬性降低紅色
風虛弱所有攻擊屬性降低灰色

XML 列舉定義:

<ExtraItems>
  <Item Value="0" Src="Interface/Icon/Extra0.png" Name="麻痺" Description="效果:無法動彈"/>
  <Item Value="1" Src="Interface/Icon/Extra1.png" Name="混亂" Description="效果:亂跑"/>
  <Item Value="2" Src="Interface/Icon/Extra2.png" Name="冰凍" Description="效果:速度減緩"/>
  <Item Value="3" Src="Interface/Icon/Extra3.png" Name="中毒" Description="效果:持續傷血"/>
  <Item Value="4" Src="Interface/Icon/Extra4.png" Name="燃燒" Description="效果:所有防御屬性值降低"/>
  <Item Value="5" Src="Interface/Icon/Extra5.png" Name="虛弱" Description="效果:所有攻擊屬性值降低"/>
</ExtraItems>

2. 精靈變色實現:矩形遮罩

WPF/Silverlight 無直接改圖片色相 API,改用遮罩間接實現。在 QXSpirit XAML 加入矩形遮罩:

<Rectangle Name="BodyMask" Opacity="0.3" Visibility="Collapsed" Panel.ZIndex="1">
  <Rectangle.OpacityMask>
    <ImageBrush x:Name="BodyMaskSource"/>
  </Rectangle.OpacityMask>
</Rectangle>

後台同步遮罩尺寸與精靈圖片,需時設 BodyMaskSource.ImageSource = Body.Source、填入對應色相 Fill 並顯示。恢復時隱藏 (Collapsed 不佔資源)。

3. 持續時間管理

精靈加 double[] ExtraTime 記錄 6 種屬性持續時間,配合主介面 1 秒輔助執行緒 (AuxiliaryThread) 同步遞減並處理邏輯(如中毒每秒傷血)。

各屬性詳細實作

1. 雷(麻痺)

enemy.BodyMaskColor = new SolidColorBrush(Colors.Snow);
enemy.BodyMaskSource.ImageSource = enemy.Body.Source;
enemy.TimerState = TimerStates.Stop;
Super.PauseSpiritStoryboard(enemy);

移動/A* 方法開頭加 if (spirit.ExtraTime[0] > 0) return;。效果:

2. 混(混亂)

if (spirit.ExtraTime[1] > 0) {
    p = new Point(p.X + (p.X > spirit.X ? -random.Next(200) : random.Next(200)),
                  p.Y + (p.Y > spirit.Y ? -random.Next(200) : random.Next(200)));
}

3. 冰(冰凍/減速)

修改 Buff 陣列對應速度索引(5 跑速、6 物攻速、7 施法速):

enemy.Buff[5] = enemy.ExtraEffect[magic.ExtraAttribute];
enemy.Buff[6] = enemy.ExtraEffect[magic.ExtraAttribute];
envenemy.Buff[7] = enemy.ExtraEffect[magic.ExtraAttribute];

時間歸零時 Buff 歸零。驗證了第 28 節屬性結構設計正確性。效果:

4. 毒(中毒)

輔助執行緒中判斷 ExtraTime[3] > 0 則 Super.DoInjure(...) 傷血,並同步遞減所有 ExtraTime。效果:

5. 火(燃燒/降防)

enemy.Buff[9] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 物防
enemy.Buff[10] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 格擋
enemy.Buff[12] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 魔防

6. 風(虛弱/降攻)

enemy.Buff[1] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 最小物攻
enemy.Buff[2] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 最大物攻
enemy.Buff[13] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 最小魔攻
enemy.Buff[14] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 最大魔攻
enemy.Buff[15] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 暴擊率

六大屬性囊括主流魔法效果,可延伸出定身、眩暈、減速細分等。教程已完美詮釋 WPF-ARPG 引擎核心,後續將深入補充優化。敬請關注。

出處:https://alamiye010.cnblogs.com/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved