D-PAD或操纵杆运动Corona SDK

时间:2013-10-25 09:12:10

标签: android lua game-physics

我正在尝试为我在学校的项目制作一个RPG风格的游戏,应该在明年完成。我正在使用Corona SDK,我一直在尝试搜索信息一段时间后,我发现了一个D-PAD移动代码,我试图应用它,但它不起作用。

继承运动.lua

-- D-PAD buttons
local buttonUp = display.newImage("images/button.png", 50, 300)
local buttonDown = display.newImage("images/button.png", 50, 375)
local buttonLeft = display.newImage("images/button.png", 50, 375)
local buttonRight = display.newImage("images/button.png", 50, 375)
local buttonLeftUp = display.newImage("images/buttonv2.png", 50, 375)
local buttonRightUp = display.newImage("images/buttonv2.png", 50, 375)
local buttonLeftDown = display.newImage("images/buttonv2.png", 50, 375)
local buttonRightDown = display.newImage("images/buttonv2.png", 50, 375)

local player = display.newImage("images/player.png")
player.width = 100
player.height = 60
player.y = 260
player.x = math.random(45, 175)
physics.addBody(player, "dynamic", {friction=0.5, bounce=0, gravity=0})

print(player.x)

--Objects and properties
buttonUp.x = display.contentWidth / 2
buttonUp.y = display.contentHeight - 212
buttonUp.alpha = 0.4
--

buttonDown.x = display.contentWidth / 2
buttonDown.y = display.contentHeight - 100
buttonDown.alpha = 0.4
buttonDown.rotation = 180
--

buttonLeft.x = (display.contentWidth / 2) - 56
buttonLeft.y = display.contentHeight - 156
buttonLeft.alpha = 0.4
buttonLeft.rotation = -90
--

buttonRight.x = (display.contentWidth / 2) + 56
buttonRight.y = display.contentHeight - 156
buttonRight.alpha = 0.4
buttonRight.rotation = 90
--

buttonLeftUp.x = (display.contentWidth / 2) + 56
buttonLeftUp.y = display.contentHeight - 100
buttonLeftUp.alpha = 0.4
buttonLeftUp.rotation = 90
--

buttonRightUp.x = (display.contentWidth / 2) + 56
buttonRightUp.y = display.contentHeight - 212
buttonRightUp.alpha = 0.4
--

buttonLeftDown.x = (display.contentWidth / 2) - 56
buttonLeftDown.y = display.contentHeight - 212
buttonLeftDown.alpha = 0.4
buttonLeftDown.rotation = -90
--

buttonRightDown.x = (display.contentWidth / 2) - 56
buttonRightDown.y = display.contentHeight - 100
buttonRightDown.alpha = 0.4
buttonRightDown.rotation = 180
--

--Variables that will be used
local motionx = 0 --X Motion
local motiony = 0 -- Y Motion
local speed = 5 -- Speed

local function stop (event) --Statements to control when there is no 
--touch and the touch is outside the D-Pad

        if "ended" == event.phase then --Check to see if the touch ended

        motionx = 0
        motiony = 0
        end

        --Touch Pos. Checkers

        if event.y < (display.contentHeight - 252) then

        motionx = 0
        motiony = 0

        end


        if event.y > (display.contentHeight - 70) then

        motionx = 0
        motiony = 0

        end

        if event.x > (display.contentWidth - 70) then

        motionx = 0
        motiony = 0

        end

        if event.x < 69 then

        motionx = 0
        motiony = 0

        end
    end

Runtime:addEventListener("touch", stop ) --What activates the stop function

----
local function move (event) -- Moves and updates the Player's movement 
--and the speed feedback
player.x = player.x + motionx;
player.y = player.y + motiony;

end


Runtime:addEventListener("enterFrame", move) --Every frame of the program will 
--run this     function

-----

local function wrap (event) --Function used to keep the player on screen

if player.x < -85 then
player.x = 405
end
----
if player.x > 405 then
player.x = -85
end
-------
if player.y < -88 then
player.y = 568
end
----
if player.y > 568 then
player.y = -88
end
---

if speed < 0 then

speed = 0
end


Runtime:addEventListener("enterFrame", wrap)

-------

--Button Functions to set the motionx and motiony variables 

function buttonUp:touch()
motionx = 0
motiony = -speed
end

buttonUp:addEventListener("touch", buttonUp)

------
function buttonDown:touch()
motionx = 0
motiony = speed

end

buttonDown:addEventListener("touch", buttonDown)
------

function buttonLeft:touch()
motionx = -speed
motiony = 0

end

buttonLeft:addEventListener("touch", buttonLeft)
------
function buttonRight:touch()
motionx = speed
motiony = 0

end

buttonRight:addEventListener("touch", buttonRight)
-------
-----

function buttonLeftUp:touch()
motionx = speed
motiony = speed

end

buttonLeftUp:addEventListener("touch", buttonLeftUp)


function buttonRightUp:touch()
motionx = speed
motiony = -speed

end

buttonRightUp:addEventListener("touch", buttonRightUp)

function buttonLeftDown:touch()
motionx = -speed
motiony = -speed

end

buttonLeftDown:addEventListener("touch", buttonLeftDown)

function buttonRightDown:touch()
motionx = -speed
motiony = speed

end

buttonRightDown:addEventListener("touch", buttonRightDown)
end

并且继承了main.lua文件

-----------------------------------------------------------------------------------------
--
-- main.lua
--
-----------------------------------------------------------------------------------------

-- Coding Tutorials
-- http://forums.coronalabs.com/topic/35372-rotation-problem-with-tap-movementrpg-like/
-- http://www.coronalabs.com/blog/2013/01/22/implementing-pinch-zoom-rotate/#comment-25508
-- http://forums.coronalabs.com/topic/35430-movements-in-rpg-game/
-- http://thatssopanda.com/corona-sdk-tutorials/moving-a-character-left-and-right-with-corona-sdk/
-- http://www.williammalone.com/articles/create-html5-canvas-javascript-game-character/images/character-color.png
-- http://www.youtube.com/watch?v=i_n3-ThKrtw

-- Useful information
-- http://www.coronalabs.com/resources/3rd-party-tools-and-services/
-- http://springboardpillow.blogspot.co.uk/2012/04/sample-code.html

-- Sprites
-- http://opengameart.org/content/700-sprites

-- Sprite sheets and  Sprite sequences
-- http://www.coronalabs.com/blog/2013/05/14/sprites-and-image-sheets-for-beginners/
-- http://docs.coronalabs.com/api/library/sprite/index.html

-- Code Examples
-- http://mobile.tutsplus.com/tutorials/corona/creating-a-scrolling-background-with-corona-sdk/

-- Movement D-PAD
-- http://developer.coronalabs.com/code/d-pad-demo

-- Collision detection
-- http://developer.coronalabs.com/content/game-edition-collision-detection
-- http://developer.coronalabs.com/code/physics-body-collision-location
-- http://forums.coronalabs.com/topic/32706-get-actual-collision-xy/

-- Physics
-- http://docs.coronalabs.com/api/library/physics/

-- Inventory system
-- http://howto.oz-apps.com/2011/07/inventory-management-system-for-games.html
-- http://forums.coronalabs.com/topic/29697-inventory-system-for-adventure-game/
-----------------------------------------------------------------------------------------

-- Requirements

-- Set Variables
_W = display.contentWidth;
_H = display.contentHeight;
motionx = 0;
speed = 2;

--Collision filters
local playerCollisionFilter = {categoryBits = 1, maskBits = 2}
local objectsCollision = {categoryBits = 2, maskBits = 1 }

-- Start Physics
local physics = require("physics")

physics.start();
physics.setGravity(0,0)


--background
local backgroundimage = display.newImage("images/bg.png")
backgroundimage.x = 175; backgroundimage.y = 180
backgroundimage.x = "center"

require("movement")

function scrollCity(self, event)
    if self.x < -429 then
        self.x = self.x
        self.x = 100
    else
        self.x = self.x
    end
end

backgroundimage.enterFrame = scrollCity
Runtime:addEventListener("enterFrame", backgroundimage)

我唯一的问题是球员运动,我会提前感谢一些帮助。

1 个答案:

答案 0 :(得分:1)

对于每个按钮中的代码,我建议播放器仅基于event.phase移动。应该有单独的条件按住按钮然后放手。这是一个让你入门的修改。

function buttonUp:touch(event)
    if event.phase == "began" then
       motionx = 0
       motiony = -speed
    return true
    elseif event.phase == "ended" then
       -- some condition for if you let go
       motionx = 0; motiony = 0; -- I assume you'd want to stop
    end
end

buttonUp:addEventListener("touch", buttonUp)