p5.j​​s –难以使用keyPressed函数和更改y坐标

时间:2019-06-17 23:30:21

标签: javascript if-statement keyboard-events p5.js

涉及编程方面的任何事情,我都是初学者;我绝对没有任何经验。考虑到这一点,我一直在拼命分配一项任务,以设法完成任务-创建一款功能齐全的太空射击游戏,类似于Galaga或Space Invaders。不幸的是,我被困住了。 (真令人惊讶,对吧?)

我在这方面进展甚微,但是我最近的困难是尝试进行故障排除并弄清楚为什么我已恰当地指定为“玩家”飞船的物体不会上下移动。我不确定要寻找什么-程序解释键盘输入的方式是否有问题?我根本无法识别的坐标有问题吗?也许是变量的范围?

在任何情况下,都使用名为Ship()的构造函数调用该对象-该对象本身是一个三角形。 (我已经提到过,我宁愿不要浪费时间去尝试找出复杂的形状,因为我是个白痴,也许做得很好?但是我离题了。)我在六个不同的变量中指定了坐标,每个变量对应于三个顶点之一的x或y值。与此无关的是,画布大小为400像素乘400像素。

...回想起来,这可能意义不大。

仅需澄清一下,以下是constructors.js文件的所有部分,它与用sketch.js编写的主要代码分开。我已经确保也将其链接到HTML文件,以防有人怀疑。

  /*
  Rather than setting the values as static numbers, I chose to
  set them dynamically so that the triangle would appear in the
  same relative position no matter the size of the canvas:
  */

  // coordinates of first vertex – bottom left
  this.x1 = width * 9/20;
  this.y1 = height * 9/10;
  // coords of second vertex – top center
  this.x2 = width/2;
  this.y2 = height * 4/5;
  // coords of third vertex – bottom right
  this.x3 = width * 11/20;
  this.y3 = height * 9/10;
  // the shape is then called via the triangle() function:
  this.show = function() {
    triangle(this.x1, this.y1, this.x2, this.y2, this.x3, this.y3);
  };

我在包含函数的变量if内编写了move语句,该语句旨在与主文件中的keyPressed()函数相对应:

  // constructors.js
  this.move = function(dir) {
    if (key === 'a' || 'd') {
      if (this.x1 > 0 && this.x3 < width) {
        this.x1 += dir;
        this.x2 += dir;
        this.x3 += dir;
      }
    } else if (key === 'w' || 's') {
      if (this.y1 < height && this.y2 > 0) {
        this.y1 += dir;
        this.y2 += dir;
        this.y3 += dir;
      }
    }
  };

  // sketch.js
  function keyPressed() {
    // ship was initialised in setup() as an instance of Ship()
    let left = -5, right = 5,
        up = -2, down = 2;
    if (key === 'a') {
      ship.move(left);
    } else if (key === 'd') {
      ship.move(right);
    } else if (key === 'w') {
      ship.move(up);
    } else if (key === 's') {
      ship.move(down);
    }

如果我还没有明确说明,目的是让程序(软件?)处理来自键盘的用户输入并相应地移动对象。

我不太确定发生了什么事;由于某些原因,当我测试W和S键时,它们会导致飞船分别向左和向右移动两个像素,而不是向上和向下移动-预期的结果。

问题是,我不能使用开发人员控制台-我使用的设备归某个组织所有,并且他们限制了对开发工具的访问-但即使我可以,我也不是很熟悉目前足以使用它。但是,我什至不知道我是否还会收到任何错误消息,因为考虑到代码(如现在)永远不会导致程序崩溃。这是我决定寻求帮助的主要原因。

您可以提供的任何建议或建议,或者可以确定我应编辑的代码部分(如有),我将万分感谢。

非常感谢你们。

(作为一个旁注,我希望你们明白不是要求完整的解决方案;我也不打算得到一个解决方案。但是, ,但偶尔有人提供 调试的代码(再次,我不希望有人会竭尽全力做到这一点 [尤其是对于 me ,在所有人中] ),我不得不要求您提供详尽的解释,其中概述了两段代码之间的区别,而详细信息哪里为什么发生错误。我想为自己提供尽可能多的学习经验,因为我通常不喜欢那些利用他人正直的人来快速做出回答的人。)

1 个答案:

答案 0 :(得分:0)

这都是因为if语句错误。 您不能使用if( key === 'a' || 'd') 在此语句中,代码检查key是否等于'a'字符或是否存在'd'字符。 这就是即使即使在所有情况下都按a d s w并且if语句为true的原因,也是如此。 如果您将代码更改为

'd'

一切都会像魅力一样。