【问题标题】:Corona SDK - LUA Setting attribute of an array works on simulator but not on deviceCorona SDK - 阵列的 LUA 设置属性适用于模拟器但不适用于设备
【发布时间】:2014-08-24 10:13:28
【问题描述】:

此函数逐行读取文件并将全局变量设置为相应读取的值。但是,问题是此代码在模拟器上 100% 可以正常工作,但是一旦在 android 设备上编译并运行,它就会停止工作。通过使用显示文本,我发现错误位于代码行:“mapObject[i].x = sum”。属性 .x 是 real 类型,我已经确认 sum、numerator 和 denominator 都是数字数据类型。应用程序在第一次运行包含“mapObject[i].x = sum”的循环时崩溃,因此 i = 1. 1 在数组的范围内。任何帮助表示赞赏,我只是无法理解这一点。函数代码如下:

-- Read map from file
local function loadmap(mapnum)
    local tempstring
    local numerator
    local denominator
    local sum
    local i

    local path = system.pathForFile( "maps/map" .. mapnum .. ".txt", system.ResourceDirectory)
    --Open the file
    local fh = io.open( path, "r" )

    if fh then
        -- read the lines of data systematically.
        mapName = fh:read( "*l" )
        mapNPCS = fh:read( "*l" )
        mapSpawnTimer = tonumber(fh:read( "*l" ))
        mapSpawnMax = tonumber(fh:read( "*l" ))
        mapSpawnMaxLocations = tonumber(fh:read( "*l" ))
        mapObjectMax = tonumber(fh:read( "*l" ))

        for i = 1, mapObjectMax do
            tempstring = fh:read( "*l" )
            mapObject[i] = display.newImage("graphics/" .. tempstring .. ".png")

            -- Fractional mapping for all screen sizes
            denominator = tonumber(fh:read( "*l" ))
            numerator = tonumber(fh:read( "*l" ))
            sum = (display.contentWidth / denominator) * numerator
            mapObject[i].x = sum

            denominator = tonumber(fh:read( "*l" ))
            numerator = tonumber(fh:read( "*l" ))
            sum = (display.contentHeight / denominator) * numerator
            mapObject[i].y = sum

            mapObject[i].myName = "object"      

            physics.addBody(mapObject[i], "kinematic", {density = 10.0, friction = 0.0})
        end

        for i = 1, mapSpawnMaxLocations do
            mapSpawnX[i] = tonumber(fh:read( "*l" ))
            mapSpawnY[i] = tonumber(fh:read( "*l" ))
        end

        io.close( fh )
    end
end

这里是代码自带的全局变量:

-- Map Data Variables
local mapName
local mapNPCS
local mapSpawnTimer
local mapSpawnMax
local mapSpawnMaxLocations
local mapObjectMax
local mapObject = {}
local mapSpawnX = {}
local mapSpawnY = {}

-- Map Npc Spawning
local mapNPC = {}
local maxMapNPCS = 30
local npcsSpawned
local spawnTimer = 0

【问题讨论】:

  • 请不要混淆LuaLUA。两种语言是不同的。 “Lua”是一个名字,在葡萄牙语中的意思是“月亮”。请不要写它为“LUA”,这样既丑陋又令人困惑,因为那样它就变成了different meanings的首字母缩写,代表不同的人。

标签: android lua coronasdk


【解决方案1】:

在物理设备上尝试的一些事情:

  • 如果您使用sum = display.contentWidth 是否有效?
  • sum = 100 怎么样?
  • 会不会分母是0? (虽然这不应该导致崩溃,只是一个错误)
  • 尝试将mapObject[i].x = sum 替换为mapObject[i].x = 100,它仍然会崩溃吗?
  • 难道mapObject[i] 不是一个有效的显示对象,比如mapObject[i] = display.newImage("graphics/" .. tempstring .. ".png") 中的路径无效或者tempstring 是否为空? (虽然你认为display.newImage('graphics/.png') 应该不会造成任何麻烦)

【讨论】:

    【解决方案2】:

    我猜:

    mapObject[i] = display.newImage("graphics/" .. tempstring .. ".png")
    

    正在生成设备上无效的文件名。设备区分大小写,而模拟器则不区分大小写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 2011-03-08
      • 2015-02-13
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多