#events #lua #collision-detection #coronasdk #collision
#Мероприятия #lua #обнаружение столкновения #coronasdk #столкновение
Вопрос:
У меня новая проблема.. Я не могу это исправить..
Я создаю как мяч, и когда я щелкаю, мяч летит туда, куда я щелкнул. Так что все в порядке. Я заполняю фреймами некоторые плоскости, которые падают под действием силы тяжести.
Но у меня проблема, потому что мое столкновение не срабатывает, когда мяч и плоскость касаются друг друга…
Кто-нибудь может мне помочь? Это мой код .
--------------------------------------------------------
-- CHARACTER PART --
--------------------------------------------------------
-- Creating the character --
local _H = display.contentHeight;
local _W = display.contentWidth;
local character = display.newImageRect("images/small-black.png",80,80);
character:setReferencePoint(display.CenterReferencePoint);
character.x = _W/2; character.y = _H/2;
character.color = "reddish";
-- This is necessary so we know who hit who when taking care of a collision event
character.name = "character"
-- Listen to collisions
character.collision = onCollision
character:addEventListener("collision", character)
-- Text to know the phase--
local txt = display.newText("click state",0, 0, native.systemFont, 16*2);
txt.xScale = 0.5; txt.yScale = 0.5;
txt:setReferencePoint(display.CenterReferencePoint);
txt.x = _W/2; txt.y = _H/2;
-- Function on touch --
function character:touch(e)
if(e.phase == "began") then
txt.text = "Began Phase";
display.getCurrentStage():setFocus(e.target, e.id);
elseif(e.phase =="moved") then
txt.text = "Moved phase";
elseif(e.phase == "ended") then
txt.text = "Ended phase";
transition.to(self, {x = e.x, y = e.y, time=800});
transition.to(self, {x = e.x, y = e.y, time=800});
end
end
-- Add event --
character:addEventListener("touch", character);
--------------------------------------------------------
-- ENNEMY PART --
--------------------------------------------------------
-- Load and start physics
local physics = require("physics")
physics.start()
-- Gravity --
physics.setGravity(0, 20)
-- Layers (Groups) --
local gameLayer = display.newGroup()
local enemiesLayer = display.newGroup()
-- Declare variables
local gameIsActive = true
local halfPlayerWidth
local textureCache = {}
textureCache[1] = display.newImage("images/enemy.png"); textureCache[1].isVisible = false;
local halfEnemyWidth = textureCache[1].contentWidth * .5
gameLayer:insert(enemiesLayer)
-- Take care of collisions
local function onCollision(self, event)
-- Player collision - GAME OVER
if self.name == "character" and event.other.name == "enemy" and gameIsActive then
local gameoverText = display.newText("Game Over!", 0, 0, "HelveticaNeue", 35)
gameoverText:setTextColor(255, 255, 255)
gameoverText.x = display.contentCenterX
gameoverText.y = display.contentCenterY
gameLayer:insert(gameoverText)
-- This will stop the gameLoop
gameIsActive = false
end
end
-- Add to main layer
gameLayer:insert(character)
-- Store half width, used on the game loop
halfPlayerWidth = character.contentWidth * .5
-- GAME LOOP --
local timeLastEnemy = 0, 0
local function gameLoop(event)
if gameIsActive then
-- Remove collided enemy planes
--for i = 1, #toRemove do
--toRemove[i].parent:remove(toRemove[i])
--toRemove[i] = nil
--end
-- Check if it's time to spawn another enemy,
-- based on a random range and last spawn (timeLastEnemy)
if event.time - timeLastEnemy >= math.random(600, 1000) then
-- Randomly position it on the top of the screen
local enemy = display.newImage("images/enemy.png")
enemy.x = math.random(halfEnemyWidth, display.contentWidth - halfEnemyWidth)
enemy.y = -enemy.contentHeight
-- This has to be dynamic, making it react to gravity, so it will
-- fall to the bottom of the screen.
physics.addBody(enemy, "dynamic", {bounce = 0})
enemy.name = "enemy"
enemiesLayer:insert(enemy)
timeLastEnemy = event.time
end
end
end
-- Call the gameLoop function EVERY frame,
-- e.g. gameLoop() will be called 30 times per second ir our case.
Runtime:addEventListener("enterFrame", gameLoop)
Ответ №1:
Проблема исправлена!
Не забудьте написать physics.addBody ( .. )