This IS your problem at the moment and the fix is above.
Printable View
I have added that to my code already
-----------------------------------------------------------------
-- Created by splodger15
----------detect other cars collision--------------
function detectCollision(player, opponent)
if (player.x + character:width() > opponent.x) and (player.x < opponent.x + opponent.pic:width()) and (player.y + character:height() > opponent.y) and (player.y < opponent.y + opponent.pic:height()) then
screen.waitVblankStart(60)
dofile("menu.lua")
end
end
Room_width = 480
Room_height = 272
player1x = 15
player1y = 136
road=Image.load("images/road.PNG")
background=road
car1=Image.load("images/car1.PNG")
player1=car1
car2 = {}
car2.x = 128
car2.y = 90
car2Height = 63
car2Width = 33
car2.pic = Image.load("images/car2.PNG")
car3=Image.load("images/car3.PNG")
car4=Image.load("images/car4.PNG")
perhaps you have to use the code you used for car2 for car3 and car4 as well
The problem that is you STILL have the code that overwrites the variable type of car2.pic here. It goes from an image to a table:
And yes, you have to do it for car3 and car4 since the same mistake is duplicated there.Quote:
car2.pic = car2
Thank you for helping me out with this yaustar
My game runs for a bit (5 seconds) then it comes up with this error
Error: SCRIPT.LUA:6: attempt to call method 'width' (a nil value)
------------------------------------------------------------------
-- Created by splodger15
----------detect other cars collision--------------
function detectCollision(player, opponent)
if (player.x + character:width() > opponent.x) and (player.x < opponent.x + opponent.pic:width()) and (player.y + character:height() > opponent.y) and (player.y < opponent.y + opponent.pic:height()) then
screen.waitVblankStart(60)
end
end
Room_width = 480
Room_height = 272
player1x = 15
player1y = 136
road=Image.load("images/road.PNG")
background=road
car1=Image.load("images/car1.PNG")
player1=car1
car2=Image.load("images/car2.PNG")
car3=Image.load("images/car3.PNG")
car4=Image.load("images/car4.PNG")
----------walls------------
wall1 = Image.createEmpty(480,2)
wall2 = Image.createEmpty(2,272)
wall3 = Image.createEmpty(2,272)
wall4 = Image.createEmpty(480,2)
wall1 = {x = 0, y = 0, height = wall1:height(), width = wall1:width() }
wall2 = {x = 450, y = 0, height = wall2:height(), width = wall2:width() }
wall3 = {x = 0, y = 0, height = wall3:height(), width = wall3:width() }
wall4 = {x = 0, y = 299, height = wall4:height(), width = wall4:width() }
player = {}
player.x = 250
player.y = 100
playerHeight = 63
playerWidth = 33
car2 = {}
car2.x = 128
car2.y = 90
car2Height = 63
car2Width = 33
car2.pic = Image.load("images/car2.PNG")
car3 = {}
car3.x = 228
car3.y = 90
car3Height = 63
car3Width = 33
car3.pic = Image.load("images/car3.PNG")
car4 = {}
car4.x = 28
car4.y = 20
car4Height = 63
car4Width = 33
car4.pic = Image.load("images/car4.PNG")
character = car1
------------------player sprite loading--------------
function rands1()
rand2 = math.random(1,3)
if rand2 ==1 then
car2.pic = car2
end
if rand2 ==2 then
car3.pic = car3
end
if rand2 ==3 then
car4.pic = car4
end
end
function rands2()
rand3 = math.random(1,3)
if rand3 ==1 then
car2.pic = car2
end
if rand3 ==2 then
car3.pic = car3
end
if rand3 ==3 then
car4.pic = car4
end
end
function rands3()
rand4 = math.random(1,3)
if rand4 ==1 then
car2.pic = car2
end
if rand4 ==2 then
car3.pic = car3
end
if rand4 ==3 then
car4.pic = car4
end
end
XScrollPosition = 480
numberOfScrolls = 0
while true do
math.randomseed(os.time() )
rand=math.random(1,3)
random1 =math.random(20,25)
random2 =math.random(90,95)
random3 =math.random(192,197)
pad = Controls.read()
screen:clear()
oldx = player.x
oldy = player.y
screen:clear()
if pad:left() then
character = car1
player.x = player.x - 2
end
if pad:right() then
character = car1
XScrollPosition = XScrollPosition - 10
if XScrollPosition < 0 then
XScrollPosition = XScrollPosition + 480
numberOfScrolls = numberOfScrolls + 1
end
end
if pad:up() then
character = car1
player.y = player.y - 2
end
if pad:down() then
character = car1
player.y = player.y + 2
end
if pad:triangle() then
dofile("index1.lua")
end
if pad:square() then
Image:save("screenshot.png")
end
if pad:start() then
break
end
if rand ==1 then
car2.x = car2.x -10
car3.x = car3.x-10
car4.x = car3.x-10
end
if rand ==2 then
car2.x = car2.x -10
car3.x = car3.x-10
car4.x = car3.x-10
end
if rand ==3 then
car2.x = car2.x -10
car3.x = car3.x-10
car4.x = car3.x-10
end
if car2.x <=0 then
car2.x =510
car2.y = random1
rands1()
end
if car3.x <=0 then
car3.x = 520
car3.y = random2
rands2()
end
if car4.x <=0 then
car4.x = 500
car4.y = random3
rands3()
end
screen:clear()
screen:blit(XScrollPosition, 0, road)
if XScrollPosition > 0 then
screen:blit(XScrollPosition - 480, 0, road)
else
screen:blit(XScrollPosition + 480, 0, road)
end
if numberOfScrolls > 30 then
dofile("eol.lua")
end
if player.x > 448 then
Player.x = 448
end
if player.x < 0 then
player.x = 0
end
if player.y > 240 then
player.y = 240
end
if player.y < 0 then
player.y = 0
end
detectCollision(player, car2)
detectCollision(player, car3)
detectCollision(player, car4)
-----------blit background and player------------
screen:blit(player.x, player.y, character)
screen:blit(car2.x, car2.y, car2.pic)
screen:blit(car3.x, car3.y, car3.pic)
screen:blit(car4.x, car4.y, car4.pic)
screen.flip()
screen.waitVblankStart()
end
the 6 refers to line 6
use an editor the shows the line numbers down the left margin, such as emeditor
its trying to look up :width so its either
character:width()
or opponent.pic:width()
and i dont see a declaration for opponent
oh i do now.. :s
at the moment you are using
character:width()........... value is a record in a table
opponent.pic:width......... value is a record in a table in a table
car2Width....................... just a value
you need to decide on which way your going to store widths and change them
(player.x + character:width() > opponent.x) and (player.x < opponent.x + opponent.pic:width())
Could it be the bit i highlighted bold
The close bracket on the end
no its not the bracket , its what yaustar explains above
try deletingQuote:
------------------player sprite loading--------------
function rands1()
rand2 = math.random(1,3)
if rand2 ==1 then
car2.pic = car2
end
if rand2 ==2 then
car3.pic = car3
end
if rand2 ==3 then
car4.pic = car4
end
end
function rands2()
rand3 = math.random(1,3)
if rand3 ==1 then
car2.pic = car2
end
if rand3 ==2 then
car3.pic = car3
end
if rand3 ==3 then
car4.pic = car4
end
end
function rands3()
rand4 = math.random(1,3)
if rand4 ==1 then
car2.pic = car2
end
if rand4 ==2 then
car3.pic = car3
end
if rand4 ==3 then
car4.pic = car4
end
end
I deleted the bit you said to delete but now i am getting.
Also is there a text editor that has the numbers down the side so i can find it easier
------------------------------------------------------------------
error: SCRIPT.LUA:144: attempt to call global 'rands1' (a nil value)