【问题标题】:values not read from array未从数组中读取的值
【发布时间】:2015-11-25 12:04:10
【问题描述】:

这是我第一次使用二维数组,我似乎无法解决这个问题。我正在团结一致地工作,我在代码底部为每种方法都有一个按钮。每次我按下按钮时,调试都会显示该方法被正确调用,甚至可以正确地将其添加到先前存储的值中。

问题是当我尝试将某些内容分配给存储在数组中的值时,它不会检索到正确的值。所以在这种情况下,如果我调用add addenergy(); 2 次,调试会显示

"将 1 添加到 0,02"

即使我在开始时将其设置为 3。检查值仍然是 3,tab 也会显示 3。我做错了什么?

using UnityEngine;
using System.Collections;

public class factioncontroller : MonoBehaviour {

public int[,] skills = new int[4, 3];

public int check;

// Use this for initialization
void Start () {

 skills[0, 0]=3;
}

// Update is called once per frame
void Update () {
    if (Input.GetKeyDown("tab")) { Debug.Log(skills[0, 0]);         
    check = skills[0, 0];
}
public void addskill(int x, int y) { skills[x, y] += 1; Debug.Log("added 1    to" + x + "," + y + skills[x, y]); }
public void addenergy() { addskill(0,0); }
public void addregen() { addskill(0, 1); }
public void addmovement() { addskill(0, 2); }
public void addusesS() { addskill(1, 0); }
public void addduration() { addskill(1, 1); }
public void addemp() { addskill(1, 2); }
public void addrangeD() { addskill(2, 0); }
public void adddistract() { addskill(2, 1); }
public void addstun() { addskill(2, 2); }
public void addrangeG() { addskill(3, 0); }
public void addusesG() { addskill(3, 1); }
public void addmobi() { addskill(3, 2); }
}

【问题讨论】:

  • 你是说你调用stun(),它调用addskill(2, 2),但你正在谈论的输出added 1 to 0,02对应addSkill(0, 0)
  • 我看到你已经编辑了这个问题,你打电话给addenergy() 两次而不是addstun()。根据您的输出,skills[0, 0] 等于 2 那么问题是什么?
  • 问题是方法之后的调试输出2,而选项卡上的调试输出3。但它们都应该输出5。因为设置了3并添加了2
  • 你打电话给Start()addenergy()的时间和顺序是什么?显然,它们运行的​​顺序不是您期望的顺序。先搞清楚。
  • 你确定Start 曾经被叫过吗?如果它在addenergy 之后被调用,它会将技能重置为 3。

标签: c# arrays multidimensional-array unity3d


【解决方案1】:

我不知道你调用方法的顺序,但如果你的意图是初始化skills,那为什么不在构造函数中初始化呢?

去掉Start()方法,添加如下:

// Use this for initialization
public factioncontroller()
{
    skills[0, 0] = 3;
}

这将是保证在您调用此类的任何实例方法之前调用的。

根据您的体验,似乎根本没有调用Start(),或者之后调用addenergy()

【讨论】:

  • 也许我不擅长解释:/。问题不在于初始化,而是以某种方式递增值存储2个不同的值。方法上的调试会读取一个递增的值,该值在多次调用时可以正常工作,但是每当我尝试从其他地方读取该值时,它都会读取 3
  • @ace 三个方法的执行顺序是什么? (不是你想的那样,而是真正的执行顺序,即设置断点,单步执行)
  • 没有特定的顺序,因为它们的调用取决于按下哪个按钮,并且每个按钮访问数组上的不同索引,因此它们不应相互干扰
  • @ace 编程不允许猜测。确认并确定。
  • 我已经这样做了。这就是为什么调试还显示访问了哪个值
猜你喜欢
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
相关资源
最近更新 更多