Page 2 of 2

Re: HELP ME

Posted: Sun Sep 13, 2015 5:44 pm
by ArchAngel075
think why would that be empty, should it be empty?

scratch that - it seems this line :

Code: Select all

 tileI[y + mapY] = {}
is the issue, since this table is being created each time and then you try to access a index in that table (tileI[y + mapY][index])
this WILL fail with nil index error since its a empty table?

EDIT

Is there anything that can be done to replicate the error? as right now im not getting any issues running the program (i can move right only though)

Re: HELP ME

Posted: Sun Sep 13, 2015 5:46 pm
by Doctory
I don't know how to fix this, but please. Make more meaningful titles. Have you actually read what you need to do to make a proper post?

Re: HELP ME

Posted: Sun Sep 13, 2015 5:57 pm
by Leap of Time
Ok well FUCK!!! That wasn´t even the bug... the bug on this one was the if (don´t know why) the real bug is in the mapY
I don´t know why, but I can`t use the mapY, as soon as I change it, it crashes.
I will send the source code, where it crashes, and I will attach the file:

The code:

Code: Select all

--main.lua
--LÖVE
lib = require("lib.mainLib")
keyListener = require ("lib.keyListener")
require("maps.map1")

function love.load()
	WIDTH = 1240
	HEIGHT = WIDTH / 16 * 10
	love.window.setMode(WIDTH, HEIGHT)
	
	--love.window.setFullscreen(true, "desktop")
	
	playerRightNoKnife = love.graphics.newImage("resources/entitys/Spieler (Gehen ohne Klingen, transparent).png")
	playerLeftNoKnife = love.graphics.newImage("resources/entitys/Spieler (Andere Richtung gehen ohne Klingen, transparent).png")
	--player = lib.animationArray(6, 190, 19 - 1, 50, 80, -54, playerLeftNoKnife)
	player = lib.animationArray(6, 40, 19, 50, 70, 54, playerRightNoKnife)
	playerP = playerRightNoKnife
	
	oneTime = true
	
	px = 1
	py = 1
	
	mapMotX = 0
	mapMotY = 0
	mapSX = 0
	mapSY = 0
	
	timer = 0
	iterator = 0
	max = 3
	moving = false
	direction = "left"
	
	onetime = true
	secondtime = false
	jumping = false
	
	--if abcde == nil then love.event.quit() end
	
	tileIndexer = {}
	for i = 1, 1000 do
		tileIndexer[i] = {}
		for o = 1, 1000 do
			tileIndexer[i*o] = {}
			tileIndexer[i+o] = {}
			tileIndexer[i-o] = {}
			tileIndexer[i/o] = {}
		end
	end
	
	loadTiles()
	loadMap1()
end


function love.update(dt)
	if tileIndexer[math.floor((love.window.getHeight() / 2) + tileSize * 2)][math.floor(love.window.getWidth() / 2 + mapX - 10 - tileSize * 1)] ~= 0 and direction == "left" and moving then mapMotX = 0 ; moving = false ; iterator = 0 end
	if not jumping and tileIndexer[math.floor(love.window.getHeight() / 2 + tileSize * 4 + 1)][math.floor(love.window.getWidth() / 2 + mapX - 10)] == 0 then mapMotY = 10 end
	mapSX = mapSX + mapMotX * dt
	mapSY = mapSY + mapMotY * dt
	mapX = math.floor(mapSX)
	mapY = 1
	
	
	px = love.window.getWidth() / 2 - 15
	py = love.window.getHeight() / 2 + 5
	
	if secondtime and onetime then
		mapSX = 0
		onetime = false
	end
	secondtime = true
	
	if direction == "right" and moving then playerP = playerRightNoKnife player = lib.animationArray(6, 40, 20, 50, 70, 54, playerRightNoKnife) end
	if direction == "left" and moving then playerP = playerLeftNoKnife player = lib.animationArray(6, 190, 20 - 1, 50, 80, -54, playerLeftNoKnife) end
	
	if moving then
		timer = timer + dt
		if timer > 0.21 then
			timer = 0
			iterator = iterator + 1
			if iterator > max then
				iterator = 0
			end
		end
	end
end

function love.draw()
	drawMap()
	love.graphics.draw(playerP, player[iterator], px, py)
	--the block under the player tileIndexer[math.floor(love.window.getHeight() / 2 + tileSize * 4 + 1)][math.floor(love.window.getWidth() / 2 + mapX - 10)]  x = 768, 608 y = 464
	--the block left in the middle of the player tileIndexer[math.floor((love.window.getHeight() / 2) + tileSize * 2)][math.floor(love.window.getWidth() / 2 + mapX - 10 - tileSize * 1)]
	--(love.window.getHeight() / 2) + tileSize * 2)
	love.graphics.print(math.floor((love.window.getHeight() / 2) + tileSize * 3), 200, 100)
	love.graphics.print(math.floor(love.window.getWidth() / 2 + mapX), 300, 100)
	love.graphics.print(mapSY, 400, 100)
	
end

function love.keypressed(key)
	if key == "escape" then lib.save() end
	if key == "d" then moving = true ;  direction = "right" ; mapMotX = 14 end
	if key == "a" and tileIndexer[math.floor((love.window.getHeight() / 2) + tileSize * 2)][math.floor(love.window.getWidth() / 2 + mapX - 10 - tileSize * 1)] == 0 then moving = true ;  direction = "left" ; mapMotX = -14 end
end

function love.keyreleased(key)
	if key == "d" then moving = false ;  direction = "right" ; iterator = 0 ; mapMotX = 0 end
	if key == "a" then moving = false ;  direction = "left" ; iterator = 0 ; mapMotX = 0 end
	if key == "d" and love.keyboard.isDown("a") and tileIndexer[math.floor((love.window.getHeight() / 2) + tileSize * 2)][math.floor(love.window.getWidth() / 2 + mapX - 10 - tileSize * 1)] == 0 then moving = true ; direction = "left" ; mapMotX = -14 end
	if key == "a" and love.keyboard.isDown("d") then moving = true ; direction = "right" ; mapMotX = 14 end
end

function loadTiles()
	tileSize = 16
	tile = {}
	tileIndex = {}
	tileI = {}
	tile[0] = love.graphics.newImage("resources/tiles/Tile0.png")
	tileIndex[0] = 0
	for i=1,4 do
		tile[i] = love.graphics.newImage( "resources/tiles/Tile"..i..".png" )
		tile[i]:setFilter("nearest", "linear")
		tileIndex[i] = i
	end
end

function loadMap1()
	renderHeight = 100
	renderWidth = 79
	mapX = 0
	mapY = 0
	map = requestMap1()
end

function drawMap()
	for y = 1, #map do
		if y + mapY < renderHeight then
			for x = 1, #map[y] do
				--love.graphics.print(x + mapX, x * tileSize - tileSize / 2, y * tileSize - tileSize)
				if y + mapY ~= nil then love.graphics.print(y + mapY, x * tileSize - tileSize, y * tileSize - tileSize) end
				if x + mapX < renderWidth and y + mapY < renderHeight then if tile[map[y + mapY][x + mapX]] == nil then else love.graphics.draw(tile[map[y + mapY][x + mapX]], x * tileSize - tileSize, y * tileSize - tileSize, 0, tileSize / tile[map[y + mapY][x + mapX]]:getWidth(), tileSize / tile[map[y + mapY][x + mapX]]:getHeight()) end end
				tileI[y + mapY] = {}
				--print(y + mapY, x + mapX)
				--print(map[y + mapY],#map)
                --print(map[y + mapY][x + mapX],#map)
                --print(tileI[y + mapY][x + mapX],#tileI)
                --print(tileIndex[map[y + mapY][x + mapX]],#tileIndex)
				tileI[y + mapY][x + mapX] = tileIndex[map[y + mapY][x + mapX]]
				playerTileDetect(y, x, mapY, mapX)
				--love.timer.sleep(0.05)
			end
		end
	end
end

function playerTileDetect(y, x, mapY, mapX)
	for i = 1, tileSize do
		tileIndexer[y * tileSize - tileSize + i][x * tileSize - tileSize + i] = tileI[y + mapY][x + mapX]
		for o = 1, tileSize do
			tileIndexer[y * tileSize - tileSize + i][x * tileSize - tileSize + o] = tileI[y + mapY][x + mapX]
		end
	end
	--love.graphics.print(x * tileSize - tileSize + 1, x * tileSize - tileSize, y * tileSize - tileSize)
	--love.graphics.print(x * tileSize - tileSize + 1, 100 * x + x, 200 * y + x)
	--love.graphics.print(tileIndexer[y * tileSize - tileSize + 1][x * tileSize - tileSize + 1], x * tileSize - tileSize, y * tileSize - tileSize)
	--tx = tileIndexer[math.floor(love.window.getHeight() / 2 + 5)][math.floor(love.window.getWidth() / 2 - 15)]
end


Re: The Tile System does not work

Posted: Sun Sep 13, 2015 6:00 pm
by Leap of Time
On this .love file you can move around??? I can´t! It says main.lua:143 attepmt to index a nil value

Re: The Tile System does not work

Posted: Sun Sep 13, 2015 6:05 pm
by arampl
You already changed something. Previous .love was useable (without prints).

Re: The Tile System does not work

Posted: Sun Sep 13, 2015 6:07 pm
by Leap of Time
I couldn´t use any of them...?!?

Re: The Tile System does not work

Posted: Sun Sep 13, 2015 6:12 pm
by arampl
Leap of Time wrote:I couldn´t use any of them...?!?
Sorry, I meant the first one uploaded.

Re: The Tile System does not work

Posted: Sun Sep 13, 2015 6:23 pm
by Leap of Time
I can´t use that one either. So, any solution?

Re: The Tile System does not work

Posted: Sun Sep 13, 2015 6:27 pm
by arampl
I found that your map height is 52 tiles , but you try to index 53rd (y + mapY).
If you change your loop to for example: "for y = 1, #map - 1 do" then it will work as in first uploaded file.
But you say you can't run it too... Strange...

Re: The Tile System does not work

Posted: Sun Sep 13, 2015 6:40 pm
by Leap of Time
THANK YOU VERY MUCH!!! It works! I can fall now, I didn´t do - 1, I made it - mapY so if mapY isn´t 1 it will still work!