【发布时间】: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
【问题讨论】:
-
请不要混淆Lua 和LUA。两种语言是不同的。 “Lua”是一个名字,在葡萄牙语中的意思是“月亮”。请不要写它为“LUA”,这样既丑陋又令人困惑,因为那样它就变成了different meanings的首字母缩写,代表不同的人。