Jump to content

how to use for loop in Update function properly ?


Slastraf
 Share

Recommended Posts

Script.maxEnemies = 3
Script.currentround = roundssurvived -1
Script.spawner1 = nil --entity "spawn1"
Script.spawner2 = nil --entity "spawn2"
Script.spawner3 = nil --entity "spawn3"
Script.spawner4 = nil --entity "spawn4"
Script.spawner5 = nil --entity "spawn5"
Script.spawner6 = nil --entity "spawn6"
Script.spawner7 = nil --entity "spawn7"
Script.fighting = true
Script.alreadyrunning = false
--[[wichtige Varieblen:
zombieskilled = 0
roundssurvived = 0
]]--
function Script:Start()
self.spawners={}
self.spawners[0]=self.spawner1
self.spawners[1]=self.spawner2
self.spawners[2]=self.spawner3
self.spawners[3]=self.spawner4
self.spawners[4]=self.spawner5
self.spawners[5]=self.spawner6
self.spawners[6]=self.spawner7
--self.spawner2.script:SpawnEnemy(1)
--self.spawner2.script:SpawnEnemy(2)
self:NewRound()
end


function Script:UpdatePhysics()
--local rounds = roundssurvived
--calculates the new amount of zombies in new round
--if window:KeyDown(Key.W) then self:NewRound() end
if zombiesleft <0 then zombiesleft = 0 end
if zombiesleft == 0 then self.fighting = false end
--if self.fighting == false then self:NewRound() end
self:UpdateZombieSpawn()
end
function Script:NewRound()
roundssurvived= roundssurvived +1
local a = (roundssurvived*.1) + roundssurvived
self.maxEnemies= self.maxEnemies + Math:Round(a)
end
function Script:UpdateZombieSpawn()
if zombiesleft==0 then self:NewRound() end
local g = self.maxEnemies
if self.fighting == false then
for n=0,self.maxEnemies do
if self.fighting == true then break end
if n==maxEnemies then
self.fighting = true
break
end
local b=Math:Round(Math:Random(0, 6))
self.spawners[b].script:SpawnEnemy(b)
zombiesleft = zombiesleft +1
end
end
--alreadyrunning = true
end
--[[
function Script:Collision(entity, position, normal, speed)

end
]]--


function Script:PostRender(context)
context:SetBlendMode(Blend.Alpha)
context:DrawText(tostring(self.maxEnemies),200,2)
context:SetBlendMode(Blend.Solid)
end


--[[
function Script:DrawEach(camera)

end
]]--

--[[
--This function will be called after the world is rendered, before the screen is refreshed.
--Use this to perform any 2D drawing you want the entity to display.
function Script:PostRender(context)

end
]]--

--[[
--This function will be called when the entity is deleted.
function Script:Detach()

end
]]--

--[[
--This function will be called when the last instance of this script is deleted.
function Script:Cleanup()

end
]]--

 

This is a script of mine and if I use it like that a huge amount of crawlers get spawned (it should only be as much as in the maxenemies value).

I think it is probably because the for loop gets called several times before the first one makes the fighting = true, which should end the for -loop.

My question is how to fix that.

Link to comment
Share on other sites

for n=0,self.maxEnemies do

if self.fighting == true then break end

if n==maxEnemies then

self.fighting = true

break

end

local b=Math:Round(Math:Random(0, 6))

self.spawners[b].script:SpawnEnemy(b)

zombiesleft = zombiesleft +1

end

end

 

This doesn't really make sense. The if statement to check if n == maxEnemies is kind of useless given your loop goes to maxEnemies anyway. That means your for loop will stop once it hits maxEnemies anyway. What are you trying to do here again? What's the goal?

  • Upvote 1
Link to comment
Share on other sites

for n=0,self.maxEnemies do

if self.fighting == true then break end

if n==maxEnemies then

self.fighting = true

break

end

local b=Math:Round(Math:Random(0, 6))

self.spawners[b].script:SpawnEnemy(b)

zombiesleft = zombiesleft +1

end

end

 

This doesn't really make sense. The if statement to check if n == maxEnemies is kind of useless given your loop goes to maxEnemies anyway. That means your for loop will stop once it hits maxEnemies anyway. What are you trying to do here again? What's the goal?

I want to spawn enemies in the world, and maxenemies is increasing every round.

The goal is to make it actually work fluently and in the later state of developing the enemies are resetted every 3 rounds but they also got more hp.

Link to comment
Share on other sites

You'll have to define what "more fluently" really means. What are your exact requirements for this?

Always when theres a new level , the maxzombies value is increasing by 30%,

When theres a new level the for loop gets called once and spawns the enemies.

I put this in the updatwphysiscs function so the program always updates if its time to spawn new enemies or not.

The new map function gets triggered when fighting == false.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...