(p5js/javascript)尝试将2个对象传入函数时出错:未捕获类型错误:对象未定义

(p5js/javascript) Got an error trying to pass in 2 objects into a function: Uncaught TypeError: object is undefined((p5js/javascript)尝试将2个对象传入函数时出错:未捕获类型错误:对象未定义)
本文介绍了(p5js/javascript)尝试将2个对象传入函数时出错:未捕获类型错误:对象未定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将两个对象传递到一个函数中,以查看它们是否会发生冲突,如果会,则销毁它们。在我添加碰撞功能之前,它是工作的。首先尝试通过从对象调用属性,然后使用访问器再次尝试,但我找不到它有什么问题。在带有错误的行下方指示!都会感激你的帮助。谢谢。

编辑:包含我的完整代码,对象中有一些未使用的变量,这就是我一开始没有包含它的原因

编辑2:尝试在代码前添加复选标记if (typeof this.missile != 'undefined'),但它只是滞后于游戏...

编辑3:非常困惑,如果导弹列表中没有导弹,collide(missiles[i], enemies[k], i, k); 将不会被调用。它被称为,这意味着名单上有一枚导弹,那么为什么它没有定义?变得绝望...


var missiles;
var hero;
var enemies;
function setup()
{
    createCanvas(1024, 512);
    hero = new hero(1, 0)
    enemies = [];
    missiles = [];
}

function draw()
{
    background(0);
    hero.draw();
    enemies.push(new enemy(512, 50, 1));
    enemies.push(new enemy(700, 50, 1));

    for (var i = 0; i < missiles.length; i++)
    {
        missiles[i].draw();
    }    

    for (var i = 0; i < enemies.length; i++)
    {
        enemies[i].draw();
    }

    for (var i = 0; i < missiles.length; i++)
    {
        for (var k = 0; k < enemies.length; i++)
        {
            collide(missiles[i], enemies[k], i, k); 
        }
    }
}

function hero(weaponLevel, wingmanLevel)
{
    this.weapon = weaponLevel;
    this.firerate =  5000 - (this.weapon - 1) * 50;
    this.wingman = wingmanLevel;
    this.timer = 0;

    this.draw = function()
    {
        fill(255);
        ellipse(mouseX, mouseY, 15);
        this.update();
    }

    this.update = function()
    {
        if (millis() > this.timer)
        {
            this.fire();
            this.timer = this.timer + 500;
        }
    }

    this.fire = function()
    {
        missiles.push(new missile(mouseX, mouseY, this.weapon));
    }
}

function missile(x, y, weaponLevel)
{
    this.x = x;
    this.y = y - 5;
    this.speed = 5;

    this.update = function()
    {
        this.y -= this.speed;

        if (this.y + 5 < 0)
        {
            var i = missiles.indexOf(this);
            missiles.splice(i, 1);
        }
    }

    this.draw = function()
    {
        this.update();
        stroke(255);
        line(this.x, this.y, this.x, this.y + 5);
    }

    this.getX = function()
    {
        return this.x;
    }

    this.getY = function()
    {
        return this.y;
    }
}

function enemy(x, y, level)
{
    this.x = x;
    this.y = y;
    this.health = level * 10 + 100;
    this.currentX = x;
    this.currentY = y;
    if (random(0, 100) < 3)
    {
        if (random(0, 100) < 50)
        {
            this.dropsUpgrade = true;
            this.dropsWingman = false;
        }
        else
        {
            this.dropsUpgrade = false;
            this.dropsWingman = true;
        }
    }

    this.draw = function()
    {
        rectMode(CENTER);
        fill(255,0,0);
        rect(this.x, this.y, 15, 15);
    }

    this.getX = function()
    {
        return this.currentX;
    }

    this.getY = function()
    {
        return this.currentY;
    }
}

function collide(missile, enemy, i, k)
{
    this.missile = missile;
    this.enemy = enemy;
    this.xDist = dist(this.missile.getX(), this.enemy.getX()); //Uncaught TypeError: this.missile is undefined
    this.yDist = dist(this.missile.getY(), this.enemy.getY());

    if (xDist < 15 && yDist < 15)
    {
        missiles.splice(i, 1);
        enemies.splice(k, 1);
    }
}

推荐答案

收到...

  1. for循环变量错误(内部for循环使用i而不是k)
  2. dist函数使用不正确

这篇关于(p5js/javascript)尝试将2个对象传入函数时出错:未捕获类型错误:对象未定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

本文给大家介绍Javascript js中实现和PHP一样的时间戳格式化函数的方法,具有一定的参考借鉴价值,需要的朋友可以参考下,我们知道在php中有一个date()函数,可以方便的把时间戳格式化为时间字符串。可是在js中,我们要想实现这种效果,要写好
需求是模板字符串中不允许出现script 标签、不允许有javascript: 和 .js 文件引用,主要方法如下: clearScriptTag (str) { const reg = /script[^]*([\S\s]*?)\/script/gim; // 清除标签内 相关 xss 安全代码 const reg1 = /javascript:/gim; const reg2 = / *.js/gim; if (reg.test(str)) { str
javascript中Replace全部替换字符用法实例代码,替换1次和多次,主要是正则表达式 var r= "1\n2\n3\n";//将字母\n替换成分号alert(r.replace("\n",";"));//结果:1;2\n3\n 只替换了第一个var r= "1\n2\n3\n";//将字母\n替换成分号alert(r.replace(/\n/g, ";"));//结果:1;2;3; replac
js输出当前日期和时间的实例代码,具体实例代码如下,有兴趣的朋友可以尝试运行下。 !doctype htmlhtml lang="en" head meta charset="UTF-8" title获取当前时间/title /head body script type="text/javascript" /** *获取当前时间 *format=1精确到天 *format=2精确到秒 */ function
p5.js WebGL 3d graphics covered by 2d background when rotated(P5.js旋转时被2D背景覆盖的WebGL 3D图形)
Static vector field with classic arrows at every point on p5.js(P5.js上每个点都有经典箭头的静态向量场)