Что отвечает за анимацию Item в Terraria?

133
03 января 2022, 08:20

создал новый предмет и в SetDefaults закинул строчку:

Main.itemFrame[item.type] = 3;

сам код выглядит так:

using Microsoft.Xna.Framework;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
namespace Bug_Error.Items
{
    public class Test_Bug : ModItem
    {
        public override void SetStaticDefaults()
        {
            DisplayName.SetDefault("Test_Bug");
            Tooltip.SetDefault("This is a modded sword.");
        }
        public override void SetDefaults()
        {
            Main.itemFrame[item.type] = 3; //Проблемная строка
            item.damage = 50;
            item.melee = true;
            item.width = 64;
            item.height = 64;
            item.useTime = 20;
            item.useAnimation = 20;
            item.useStyle = 1;
            item.knockBack = 6;
            item.value = 10000;
            item.rare = 2;
            item.UseSound = SoundID.Item1;
            item.autoReuse = true;
        }
        public override void AddRecipes()
        {
            ModRecipe recipe = new ModRecipe(mod);
            recipe.AddIngredient(ItemID.DirtBlock, 1);
            recipe.AddTile(TileID.WorkBenches);
            recipe.SetResult(this);
            recipe.AddRecipe();
        }
    }
}

Искал во многих источниках и нашел максимум инфу по анимации для NPC и тем, не более. Вдруг кто знает, подскажите, пожалуйста.

Answer 1

Анимация предметов осуществляется путем подключения дополнительной библиотеки using Terraria.DataStructures; После этого создается метод

public override DrawAnimation GetAnimation()
{
    return new DrawAnimationVertical(20,6);
}

Первое значение в DrawAnimationVertical - количество тиков на фрейм, второе значение - количество кадров в изображении использующимся для предмета

В более новых версиях, по информации из форума посвященного tModLoader, есть такой код

public override void FindFrame(int frameHeight)
{
    npc.frameCounter++; // count ingame ticks before next npc frame update
    if (npc.frameCounter >= 8) // if it's time to update npc frame
    {
        npc.frameCounter = 0; // reset ticks counter
        frame++; // move frame
        frame %= 6; // but keep it in range between 0 and 5
        npc.frame.Y = frameHeight * (frame + rageMode ? 6 : 0); // if boss in the second phase, move frame to the second area and apply npc frame
    }
}

8 -- interval between frame updates.(интервал между фреймами)
6 -- number of frames for each phase.(число фреймов на каждую фазу)
rageMode -- bool variable to track boss phase. (переменная, для отслеживания фазы босса) Данный код используется для Глаза-Ктулху, у которого две фазы. Также необходимо объявить переменную в классе, для работы выше представленного кода int frame = 0;

READ ALSO
Обратный метод к Camera.ScreenToWorldPoint()

Обратный метод к Camera.ScreenToWorldPoint()

В движок Unity встроен метод ScreenToWorldPoint(), который координаты точки на экране конвертирует в координаты соответствующей точки на карте(сцене/мире)Есть...

87
Поиск папок в C#

Поиск папок в C#

КАК через Stack написать код поиска папок на компютере?

68
Почему не получается передать в обобщенный метод коллекцию типов, реализующих интерфейс, без установки ограничений на <T>

Почему не получается передать в обобщенный метод коллекцию типов, реализующих интерфейс, без установки ограничений на <T>

Опыт программирования небольшой, помогите, пожалуйста, разобратьсяИмеется интерфейс IPinHelper с методом PinFavoriteItem:

109
Как переместить файл?

Как переместить файл?

У меня есть два метода: поиск и сортировка

357