Javascript:为什么警报说未定义而不是字母"k"? [英] Javascript: why is the alert saying undefined and not the letter "k"

查看:66
本文介绍了Javascript:为什么警报说未定义而不是字母"k"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以让我的数组工作并完美地显示为2d数组,但第二个尝试添加另一个从未显示过的元素,该元素永远不会保持未定义状态.我尝试了许多不同的方法,在此版本中,我尝试复制添加2d元素的方式.

I can get my array to work and display perfectly as a 2d array but the second I attempt to add another element it never shows it always stays undefined. I tried many different methods, in this version I attempted to duplicate the way that I add the 2d elements.

最终,我想将数据保存到数组中,以使正确显示的墙#"具有进一步的数据,表明实心",然后在移动"@"之前可以进行测试

Ultimately I want to save data to the array to make the walls "#" that are displaying correctly to have further data stating "solid" and then I would be able to test for that before moving the "@"

我实际上有一个工作版本,但是使用第二个数组,如果我添加更多数据,将会非常麻烦.

I actually have a working version of this but using a second array which would get very cumbersome if I add further data.

现在也很奇怪,整个地图没有被字母k覆盖

Also as it is right now I am surprised the entire map is not getting overwritten with the letter k

function gameloop(){

    var mainArray = [];
    var mapSizeX = 32;
    var mapSizeY = 128;
    var arrayDepth = 10;
    var idPos = {x:0, y:0};


   
    function initMap(mainArray, mapSizeX, mapSizeY){
        for (var i = 0; i < mapSizeX; i++) {
            mainArray.push([0])
            
            for (var j = 0; j < mapSizeY; j++) {
                mainArray[i][j] = ".";
                
                
                if(j == 0){mainArray[i][j] = "#";}
                if(j == mapSizeY-1){mainArray[i][j] = "#";}
                if(i == 0){mainArray[i][j] = "#";}
                if(i == mapSizeX-1){mainArray[i][j] = "#";}
                
                for (var k = 0; k < arrayDepth; k++) {
                    mainArray[i][j][k] = "k";
                }
                
            }
        }
    }
    
    function nl(){GameScreen.innerText += "\n";}
    function render() {GameScreen.innerText = mainArray.map(arr => arr.join("")).join("\n"); 
                        nl(); nl();}
                        
    function reposition(xChange,yChange,strA){
        //mainArray[idPos.x][idPos.y] = ".";
        //idPos.x = idPos.x + xChange;
        //idPos.y = idPos.y + yChange;
        //mainArray[idPos.x][idPos.y] = "@";
        if(mainArray[idPos.x+xChange][idPos.y+yChange][1] === "Solid"){GameLog.innerText ="You can not travel in that direction"}
        else{
            mainArray[idPos.x][idPos.y] = ".";       
            idPos.x = idPos.x + xChange;
            idPos.y = idPos.y + yChange;
            mainArray[idPos.x][idPos.y] = "@";
            GameLog.innerText = "You take a step to the " + strA
            alert(mainArray[0][0][1]);
        }
        
        render();
    }
 
   

    //Startup
    initMap(mainArray, mapSizeX, mapSizeY);
    idPos.x = mapSizeX/2; idPos.y = mapSizeY/2;
    mainArray[idPos.x][idPos.y] = "@";
    //First Render
    render(); 
    
    
    
   document.addEventListener('keydown', function(event) {
        if(event.keyCode === 38 ){reposition(-1,0,"North");}
        if(event.keyCode === 40 ){reposition(1,0,"South");}
        if(event.keyCode === 37 ){reposition(0,-1,"West");}
        if(event.keyCode === 39 ){reposition(0,1,"East");}
        
        
        //alert(event.keyCode);
    });
    
    
}

gameloop();

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello</title>
</head>
<body>
<br>
<p style="color:#7d7d7d;font-family:Lucida Console;">Dungeon Valley.<br>
<font style="color:#ABABAB;font-family:Lucida Console;font-size:0.5em";>
Taming the Borderlands.<br> 
v0.005 By heromedel. </P></font>
<P>
<section id="GameScreen" style="color:#000000;font-family:Lucida Console;"></section>
<P>
<section id="GameLog" style="color:#000000;font-family:Lucida Console;">Arrow Keys to move.<br></section>
<script src="main.js"></script>
</body>
</html>

推荐答案

如果我了解您要执行的操作,这是错误的:

If I'm understanding what you're trying to do, this is wrong:

for (var k = 0; k < arrayDepth; k++) {
   mainArray[i][j][k] = "k";
}

mainArray 应该是二维的字符串数组,对吗?那么,为什么要使用 var k 向其中添加第3维?除非您尝试附加到字符串?在Javascript中,您使用 + 附加字符串,而不使用 [] .

mainArray is supposed to be a 2d array of strings, right? So why are you using var k to add a 3rd dimension to it? Unless you're trying to append to the string? In Javascript you append to strings with +, not with [].

顺便说一句,这也是错误的:

By the way, this is also wrong:

mainArray.push([0])

您要推送一个空数组 [] ,而不是其中包含0的数组 [0] .

You want to push an empty array [], not an array with a 0 in it [0].

这篇关于Javascript:为什么警报说未定义而不是字母"k"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆