(Javascript) Есть ли способ определить более одного свойства переменной? - PullRequest
0 голосов
/ 28 февраля 2019

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

Новейшая проблема: определение переменной для изменения значения глобальной переменной.

Позвольте мне получитьфрагмент того, что я имею в виду.

Итак, это вызывает у меня всевозможные проблемы, когда я пытаюсь создать жизнеспособную систему оснащения и покупки.

У меня есть один набор глобальных переменных, определенных как:

    var Armor = {
        ClothesName: "",
        HelmetName: "",
        BodyName: "",
        ArmName: "",
        WaistName: "",
        LegName: "",
        BootsName: ""
    }

    var Weapons = {
        SwordName: "",
        RightHand: "",
        ShieldName: "",
        LeftHand: "",
        BowName: "",
        ArrowName: "",
        NumberOfArrows: 0,
        StaffName: ""
    }

Тогда я установил свою броню как таковую (это часть, которая является общим вопросом):

    1.) There is no way I can see to plug the values into the global variable:
    var MangledRags = {
        Name: "Mangled Rags" //Name of the Armor.
        Defense: 0.25        //Boost to defense.
    }

или

    2.) The Armor.Name is pushed, but the hero.Defense is neglected:
    var MangledRags;
    MangledRags = 
        Armor.ClothesName = "Mangled Rags", //Name of the Armor pushed
        hero.Defense += 0.25;               //Increase to Hero's defense when worn.

Яиспользуя функцию, чтобы попытаться передать информацию в глобальную переменную:

    function equip() {
        if (Warrior == true) {
            Armor.ClothesName = MangledRags;
            document.getElementById("Armor.ClothesName").innerHTML = Armor.ClothesName;
            document.getElementById("hero.Defense").innerHTML = hero.Defense;
    }

, которая читается здесь:

    if (Warrior == true) {
        $("<p>You equipped your armor warrior, and are on your way to town! Press <u><b>enter</b></u>.</p>").hide().insertBefore("#placeholder").fadeIn(1000); //Change the name of the warrior equipment
        isArmorOn = true;
        equip();
        currentarea = "Starter Town Gates";
        document.getElementById("currentarea").innerHTML = currentarea;
        return;
    }

, которая, в свою очередь, читается текстом HTML:

     <div id="main_attributes">
        <p>
           Name: <span id="hero.Name">0</span> &emsp; &emsp; Gender: <span id="hero.Gender">0</span><br />
           Class: <span id="hero.Class">0</span><br /><br />
           Health: <span id="hero.Health">0</span><br />
           Magic: <span id="hero.Magic">0</span><br />
           Attack Power: <span id="hero.Attack">0</span><br/>
           Defense: <span id="hero.Defense">0</span><br />
           Endurance: <span id="hero.Endurance">0</span><br />
           Current Location: <span id="currentarea">0</span>
        </p>
     </div>
     <div id="inv_left_left">
        <p>
           Head: <span id="Armor.HelmetName">0</span><br />
           Armor: <span id="Armor.BodyName">0</span><br />
           Hands: <span id="Armor.ArmName">0</span><br/>
           Waist: <span id="Armor.WaistName">0</span><br />
           Legs: <span id="Armor.LegName">0</span><br />
           Feet: <span id="Armor.BootsName">0</span><br />
        </p>
     </div>

Я создам отдельный вопрос для своих проблем с системой Магазина, если этот вопрос не решит обе проблемы для меня.

Я не нашел в Интернете ничего похожего на этот вопрос,вот почему я публикую здесь.

1 Ответ

0 голосов
/ 28 февраля 2019

Здесь есть кое-что, что нужно распаковать, и я думаю, что многие ваши проблемы могут быть решены с помощью короткого руководства по JavaScript, так как я думаю, что многие принципы (особенно окружающие типы) ускользают от вас.

Armor и Weapons являются объектами и создаются со свойствами, которые вы определили для них в первом фрагменте кода (ClothesName, SwordName и т. Д.).Они ничего не сохраняют, кроме значений, присвоенных именам клавиш, которые вы определяете в своем коде.

Я подчеркиваю это, потому что кажется, что вы хотите трактовать Armor и Weapons как types , а именно классы, которые позволят вам разделить их на экземпляры Armor и Weapon, которые имеют определенные свойства, например, с MangledRags.Чтобы напрямую решить вашу проблему, вы можете изменить свойства существующего глобального Armor следующим образом:

Armor.ClothesName = "Mangled Rags"
Armor.Defense = 0.25

Вы можете даже определить новый объект для хранения свойств искаженных ветошей, чтобы избежать их повторного ввода:

var MangledRags = {
    ClothesName: "Mangled Rags",
    Defense: 0.25,
    // more properties here...
}

function wearMangledRags() {
    Armor.ClothesName = MangledRags.ClothesName;
    Armor.Defense = MangledRags.Defense;
    // etc.
}

Это плохой стиль кода.Не ворчливым образом, а потому, что вы будете усложнять себе жизнь в будущем с большим количеством вставок копий, повторений кода и возможностью ошибок.Помимо изучения базовых принципов, объектов и типов JS, я бы рекомендовал прочитать учебник по классам .

. Вы можете рассматривать Armor и Weapons как типыони должны быть и использовать подклассы для определения экземпляров этих типов .Вам понадобятся функции ES6 для использования class API, но их можно использовать с ванильным JavaScript, хотя и сложнее и требует понимания прототипического наследования .

Существует несколько другихошибки в вашем коде, возникающие из-за неправильного понимания разницы между типом и значением (например, Warrior === true не будет работать, если Warrior не является логическим значением - вы не можете оценивать типы классов таким образом, Armor.ClothesName = MangledRags; присваиваетобъект хранится в переменной MangledRags в свойстве ClothesName переменной Armor, и я не думаю, что это то, что вам нужно).Я действительно рекомендую немного освежить в работе базовый JavaScript - в Интернете есть множество бесплатных ресурсов!Я думаю, что, сделав небольшой шаг в понимании языка, вы сможете немного легче увидеть подводные камни в вашем коде.

Не стесняйтесь, напишите мне здесь, если вам нужна дополнительная помощь, чтобы что-то здесь сломать -Я был бы рад указать вам правильное направление!Я не думаю, что такие указатели, как «глобальные ошибки плохие» помогут решить вашу проблему, но широкие успехи в понимании JavaScript сделают эту программу легкой.

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