Corona sdk: воспроизведение звука при столкновении основного объекта с препятствием

Я хочу воспроизводить определенный звук, когда мяч попадает в определенный объект (прозрачное препятствие) или проходит через определенную область.

    function onCollision(event)
    if event.phase == "began" then 
    storyboard.gotoScene("restart", "fade", 400)


    end`
    end


`ball = display.newImage("ball.png") --main object code
ball.x = 100; ball.y = 100
physics.addBody(ball, "dynamic", {density=.05, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(ball)`


--Obstacles code




`obst1 = display.newImage("obst1.png")
obst1.x = 640; obst1.y = -500
obst1.speed = 2
physics.addBody(obst1, "static", {friction=0.5, bounce=0.3, density=.1 })
screenGroup:insert(obst1)`

`missile1 = display.newImage("missile.png")
missile1.x = 700; missile1.y = math.random(5,1090)
missile1.speed = math.random(2,6)
missile1.initY = missile1.y
missile1.amp = math.random(20,100)
physics.addBody(missile1, "static", {density=0.1, bounce=0.1, friction=.2, radius=12})
screenGroup:insert(missile1)
missile1.angle = math.random(20,100)`

Итак, как я могу заставить мяч столкнуться с другим объектом и запустить звук, не останавливая игру (в функции столкновения, в ту минуту, когда объект сталкивается, он переходит на экран перезапуска)

Большое спасибо ...


person Saad Chemlal    schedule 24.05.2015    source источник
comment
Что вы уже пробовали?   -  person Zulu    schedule 24.05.2015
comment
@Zulu Я отредактировал свой вопрос, чтобы было понятнее. Простите за это ...   -  person Saad Chemlal    schedule 25.05.2015


Ответы (1)


потому что вы кажетесь таким новичком в Corona, я пытаюсь дать вам несколько советов и руководств:

Прежде всего, вы должны знать, как обнаруживать столкновения: Physics Body после этого вы должны знать, как обрабатывать события столкновения: Collision и Обнаружение столкновений, а затем вы должны знать, как воспроизводить звуки: Воспроизведение звука

вот пример игры, которую я написал сам:

--implement the physics for the project
local physics = require "physics";
physics.start()

...

-- stones pics
stone1 = stons_shape[stoneNumber][2]
stone2 = stons_shape[stoneNumber][2]
stone3 = stons_shape[stoneNumber][2]
-- stones physics
physics.addBody (stone1,"Dynamic", stons_shape[stoneNumber][1]:get(stons_shape[stoneNumber][0]))
physics.addBody (stone2,"Dynamic", stons_shape[stoneNumber][1]:get(stons_shape[stoneNumber][0]))
physics.addBody (stone3,"Dynamic", stons_shape[stoneNumber][1]:get(stons_shape[stoneNumber][0]))

-- stones property
stone1.linearDamping = stons_shape[stoneNumber][5] * 0.03
stone1.angularDamping= 1.5
stone1.power = stons_shape[stoneNumber][3]


function onCollision (event)

    if(event.object2.myName=="stone1")or(event.object2.myName=="stone2")or(event.object2.myName=="stone3") then
        -- here one stone touches another and 
        -- and so you can play a sound 
    end
end
--"onCollision" event is for all objects having collision on each other
Runtime:addEventListener( "collision", onCollision)
person Mohammad Ali Saatchi    schedule 24.05.2015
comment
Я отредактировал свой вопрос, чтобы сделать его более ясным. Исходя из того, что вы написали, я должен использовать вашу функцию onCllision, если (event.ball.myName == obst1) или (event.ball.myName == obst2) или (event.ball .myName==obst3), затем добавьте код воспроизведения звука, закройте функцию, затем скажите еще, если event.phase == begin then storyboard.gotoScene(restart, fade, 400) end ? Извините за плохое знание :( - person Saad Chemlal; 25.05.2015
comment
почти да, используйте if(event.object1.myName == obts1 или ...). Нет проблем братан. мы все прошли, прошли через это ;) - person Mohammad Ali Saatchi; 25.05.2015
comment
Оуууф, хорошо, это не сработало, потому что я не написал obst1.myName = obst1 в сцене создания. Похоже, для каждого добавленного мной obst я должен указать его имя в createScene .... большое спасибо , Вы действительно мне очень помогли ... теперь я могу добавить еще , а затем сказать , что если мяч попадает в стену , он идет непосредственно к перезапуску . Это будет if(event.object1.myName == obs1), затем воспроизвести звук еще (event.object1.myName==wall), затем storyboard.gotoScene (gameover) end ? Это нормально ? или я должен поставить объект2 вместо объекта1 - person Saad Chemlal; 25.05.2015
comment
все сделано, функция onCollision (событие), если (event.object1.myName == obst1) или (event.object1.myName == obst2), то audio.play(my_sound) end, если (event.object1.myName == obst3), то раскадровка .gotoScene(restart, fade, 400) end end -----› спасибо тебе, мой друг.... (надеюсь, что когда я загружу звук в свой game.lua, он будет воспроизведен :D ) - person Saad Chemlal; 25.05.2015