本節演示如何為遊戲魔法增加華麗附加屬性,涵蓋當前網遊最主流的六大屬性。
| 屬性 | 中文 | 效果 | 視覺色相 |
|---|---|---|---|
| 雷 | 麻痺 | 精靈無法動彈 | 雪白 |
| 混 | 混亂 | 精靈亂跑 | 黃色 |
| 冰 | 冰凍 | 移動/攻擊/施法速度減緩 | 天藍 |
| 毒 | 中毒 | 每秒持續掉血 | 綠色 |
| 火 | 燃燒 | 所有防禦屬性降低 | 紅色 |
| 風 | 虛弱 | 所有攻擊屬性降低 | 灰色 |
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>
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 不佔資源)。
精靈加 double[] ExtraTime 記錄 6 種屬性持續時間,配合主介面 1 秒輔助執行緒 (AuxiliaryThread) 同步遞減並處理邏輯(如中毒每秒傷血)。
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;。效果:
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)));
}
修改 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 節屬性結構設計正確性。效果:
輔助執行緒中判斷 ExtraTime[3] > 0 則 Super.DoInjure(...) 傷血,並同步遞減所有 ExtraTime。效果:
enemy.Buff[9] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 物防
enemy.Buff[10] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 格擋
enemy.Buff[12] = -enemy.ExtraEffect[magic.ExtraAttribute]; // 魔防
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 引擎核心,後續將深入補充優化。敬請關注。