In my game I want to have 3 spawns appear next to each other (basically in a row covering 3 columns). I want the game to spawn 1 cross, 1 circle, 1 rectangle in the row of 3 and not 2 of the same shape (example 1 cross, 1 circle, 1 cross). They then get destroyed before the spawn looks to make a new batch, so it just loops on from there.
I can’t get a proper solution to first: Spawn a line of enemies (3 objects only) and then preventing doubles.
I have managed to get different patterns of colours, and spawning them in a line side by side, but it isn’t efficient enough since I created hard copies of each object and manually position the X myself, thus creating a huge batch of code - but it does work.
As you will see from the code below, Im making my own patterns from the ® value to make sure I don’t get any repeat shapes. Ive also set the X values of each shape so that they are in 3 separate columns but in a line from left to right. I know this isn’t the right way to do this, and that there is probably a much simpler way but Im stuck.
local function spawnEnemy() local moveRate = 8000 - (100 \* wave) local r = math.floor(math.random() \* 3) if(r == 0) then blue = display.newSprite(imageSheetRectangle, sequenceDataRectangle ) blue.name = "Blue" physics.addBody(blue, { isSensor = true }) blue.x = 40 blue:setSequence("blueRect") blue:setFrame(3) blue.y = display.contentHeight - 550 blue:toFront() enemyMovement = transition.to( blue, { time=moveRate, y=600} ) enemyGroup:insert(blue) red = display.newSprite(imageSheetCross, sequenceDataCross) red.name = "Red" physics.addBody(red, {isSensor = true }) red.x = 160 red:setSequence("blueCross") red:setFrame(1) red:toFront() red.y = display.contentHeight - 550 enemyMovement = transition.to( red, { time=moveRate, y=600} ) enemyGroup:insert(red) green = display.newSprite(imageSheetCircle, sequenceDataCircle ) green.name = "Green" physics.addBody(green, { isSensor = true }) green.x = 270 green:setSequence("blueCirc") green:setFrame(2) green:toFront() green.y = display.contentHeight - 550 enemyMovement = transition.to( green, { time=moveRate, y=600} ) enemyGroup:insert(green) elseif(r == 1) then red = display.newSprite(imageSheetCross, sequenceDataCross) red.name = "Red" physics.addBody(red, {isSensor = true }) red.x = 40 red:setSequence("blueCross") red:setFrame(1) red:toFront() red.y = display.contentHeight - 550 enemyMovement = transition.to( red, { time=moveRate, y=600} ) enemyGroup:insert(red) green = display.newSprite(imageSheetCircle, sequenceDataCircle ) green.name = "Green" physics.addBody(green, { isSensor = true }) green.x = 160 green:setSequence("blueCirc") green:setFrame(2) green:toFront() green.y = display.contentHeight - 550 -- 550 default enemyMovement = transition.to( green, { time=moveRate, y=600} ) enemyGroup:insert(green) blue = display.newSprite(imageSheetRectangle, sequenceDataRectangle ) blue.name = "Blue" physics.addBody(blue, { isSensor = true }) blue.x = 270 blue:setSequence("blueRect") blue:setFrame(3) blue.y = display.contentHeight - 550 blue:toFront() enemyMovement = transition.to( blue, { time=moveRate, y=600} ) enemyGroup:insert(blue) elseif(r == 2) then --green = display.newRect(0,0,20,20) green = display.newSprite(imageSheetCircle, sequenceDataCircle ) green.name = "Green" physics.addBody(green, { isSensor = true }) green.x = 40 green:setSequence("blueCirc") green:setFrame(2) green:toFront() green.y = display.contentHeight - 550 -- 550 default enemyMovement = transition.to( green, { time=moveRate, y=600} ) enemyGroup:insert(green) blue = display.newSprite(imageSheetRectangle, sequenceDataRectangle ) blue.name = "Blue" physics.addBody(blue, { isSensor = true }) blue.x = 160 blue:setSequence("blueRect") blue:setFrame(3) blue.y = display.contentHeight - 550 blue:toFront() enemyMovement = transition.to( blue, { time=moveRate, y=600} ) enemyGroup:insert(blue) red = display.newSprite(imageSheetCross, sequenceDataCross) red.name = "Red" physics.addBody(red, {isSensor = true }) red.x = 270 red:setSequence("blueCross") red:setFrame(1) red:toFront() red.y = display.contentHeight - 550 enemyMovement = transition.to( red, { time=moveRate, y=600} ) enemyGroup:insert(red) end
