Название 'flashlightPos' не существует в текущем контексте - PullRequest
1 голос
/ 14 апреля 2020

У меня есть эти 2 ошибки, но я не уверен, почему у меня есть другой класс с почти точно такой же структурой, и я не получаю эти две ошибки. Я попытался установить все для publi c, но все еще ничего. Я понимаю, что это происходит, потому что 2 имени определяются внутри if. Однако, как я сказал в другом классе, проблема не появится. Они имеют одинаковую структуру.

The name 'ped' does not exist in the current context
The name 'flashlightPos' does not exist in the current context
using FireCallouts.SimpleFunctions;
using Rage;
using System.Drawing;

namespace FireCallouts.Equipment
{
    internal class Flashlight
    {
        private Rage.Object light;
        private bool isActive = false;
        private Ped character;


        public Flashlight(Ped character)
        {
            this.character = character;
        }

        ~Flashlight()
        {
            IsActive = false;
        }

        public bool IsActive
        {
            get
            {
                return isActive;
            }
            set
            {
                if (value == isActive)
                    return;

                if (value)
                {
                    Ped ped = Game.LocalPlayer.Character;
                    light = new Rage.Object("ex_prop_exec_cigar_01", Vector3.Zero);
                    Vector3 flashlightPos = ped.GetOffsetPosition(ped.GetPositionOffset(ped.GetBonePosition(PedBoneId.Spine2)));
                    Game.LogTrivial("[FireCallouts] Flashlight spawned");
                }
                else
                {
                    if (light)
                    {
                        light.Delete();
                    }

                    character.Tasks.ClearSecondary();
                }

                isActive = value;
            }
        }

        public void OnActiveUpdate()
        {
            if (character.IsPlayer)
            {
                GameFiber.Yield();
                Util.DrawSpotlightWithShadow(flashlightPos, ped.GetBoneRotation(PedBoneId.Spine2).ToVector(), Color.White, 13.25f, 9.25f, 2.0f, 20f, 20.0f);
            }
        }
    }
}```

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Вы объявили обе переменные в этом случае, если:

if (value)
{
   Ped ped = Game.LocalPlayer.Character;
   light = new Rage.Object("ex_prop_exec_cigar_01", Vector3.Zero);
   Vector3 flashlightPos = ped.GetOffsetPosition(ped.GetPositionOffset(ped.GetBonePosition(PedBoneId.Spine2)));
   Game.LogTrivial("[FireCallouts] Flashlight spawned");
}

вне этого условия, если переменные не определены, и вы не можете их использовать. Объявите переменные снаружи как:

Ped ped = null;
Vector3 flashlightPos = null;

и измените, как показано ниже:

if (value)
{
   ped = Game.LocalPlayer.Character;
   light = new Rage.Object("ex_prop_exec_cigar_01", Vector3.Zero);
   flashlightPos = ped.GetOffsetPosition(ped.GetPositionOffset(ped.GetBonePosition(PedBoneId.Spine2)));
   Game.LogTrivial("[FireCallouts] Flashlight spawned");
}
0 голосов
/ 14 апреля 2020

Измените ваш модификатор области видимости для переменной, к которой вы хотите получить доступ в другом классе, с private на internal или publi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...