博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
love2d教程3--输入和音乐
阅读量:4557 次
发布时间:2019-06-08

本文共 2712 字,大约阅读时间需要 9 分钟。

love2d的输入包括love.keyboard,love.mouse,love.joystick(手柄)

键盘:
按键检测是否按下可以用love.keyboard.isDown("键值"),如love.keyboard.isDown("up"),
检测向上键是否按下,按下返回真.
还可以用love.keyboard.setKeyRepeat(delay, interval)设置重复按键的延时和间隔,
当延时(delay)设为0时,不允许按住一个键不放,interval没明白怎么回事.如果你知道,请告诉我.
也可以在love.keypressed(key)回调函数中检测是哪个按键(key),我试了一下,不支持按住一个
键不放.
鼠标:
鼠标在love.mouse模块中,函数很多,可以自己查看wiki
手柄:
手柄在love.joystick模块中,由于没手柄,没有试验,与键盘,鼠标应该类似.

love2d的音乐功能在love.audio模块里,底层使用openal,支持20多种音乐格式.

音乐只有一种数据类型"source".使用love.audio.newSource可以创建一个source对象
sound = love.audio.newSource("pling.wav", "static") --有static和stream两种模式,分别对应短和长的音乐
默认是stream模式.
wiki上两种模式的对比如下,可见对长音乐应该使用strem模式
Keep in mind that, if you pass love.audio.newSource "static" as a second argument,
the sound file will be expanded into memory, so if you load a 5MB compressed .ogg file
that way, it would consume ~50MB RAM when fully decompressed. Consider not using "static"
in such cases.

接着可以使用source对象的方法控制音乐的一些效果如:

sound:setVolume(0.9) -- 音量为90%
sound:setPitch(0.5) -- 音调为50%,类似频率的高低

下面是我的示例程序,演示了鼠标轨迹的捕捉和音乐的播放.

tutor3.lua

local mousePos={}qx,qy=100,100playSound=falsefunction drawQuad(x,y,width,height)    love.graphics.setColor(0, 255, 0)    love.graphics.quad("fill",x,y,x+width,y,x+width,y+height,x,y+height)endfunction drawMouseTrack()    love.graphics.setPointSize( 3 )    local x, y = love.mouse.getPosition( )    table.insert(mousePos,x)    table.insert(mousePos,y)    love.graphics.setColor(255,0,0)    --取出mousePos table里的元素,下面即c语言的for(int i=1,i

main.lua

require("tutor03")function love.load()sound = love.audio.newSource("assets/sound.wav", "static")music = love.audio.newSource("assets/music.mp3") --默认是stream,动态加载,适合播放时间长的音乐music:setVolume(0.5)love.audio.play(music)endfunction love.draw()    drawMouseTrack()    drawQuad(qx,qy,20,20)    love.graphics.print("qx=" .. qx .. "  qy=" .. qy,20,20)endfunction love.update(dt)    --按键检测    if(love.keyboard.isDown("up")) then    qy=qy-5    end    if(love.keyboard.isDown("down")) then    qy=qy+5    end    if(love.keyboard.isDown("left")) then    qx=qx-5    end    if(love.keyboard.isDown("right")) then    qx=qx+5    end    --检测小方块是否运动到窗口边界    if(qx>=780)then    qx=780    playSound=true    elseif(qx<0)then    qx=0    playSound=true    end    if(qy>=580)then    qy=580    playSound=true    elseif(qy<=0)then    qy=0    playSound=true    end    if(playSound==true) then        love.audio.play(sound)        playSound=false    endendfunction love.keypressed(key)--~     if(key=="up") then--~     qy=qy-5--~     elseif(key=="down") then--~     qy=qy+5--~     elseif(key=="left") then--~     qx=qx-5--~     elseif(key=="right") then--~     qx=qx+5--~     endend

源码下载

转载于:https://www.cnblogs.com/xdao/archive/2012/12/08/2808280.html

你可能感兴趣的文章
Windows Phone开发之Coding4Fun对话框操作类
查看>>
现代3D图形编程学习-关于本书
查看>>
linux系统下php安装mbstring扩展的二种方法
查看>>
gridview分頁:第一頁 下一頁 1 2 3 4 上一頁 最末頁
查看>>
Hadoop-MR实现日志清洗(一)
查看>>
Bootstrap 3之美01-下载并引入页面
查看>>
在Brackets中使用Emmet
查看>>
lodash用法系列(5),链式
查看>>
ASP.NET Web API的安全管道
查看>>
推荐一个好用的 sqlite 管理器 sqliteman 感觉比 navicat 好用
查看>>
第三周学习进度报告
查看>>
使用JSON Web Tokens和Spring实现微服务
查看>>
JS学习笔记 - 运动 - 淘宝轮播图
查看>>
之字形打印矩阵
查看>>
POJ 1004 Financial Management
查看>>
HDU 2011 多项式求和
查看>>
docker network
查看>>
BZOJ3745: [Coci2015]Norma
查看>>
真有效值与有效值概念
查看>>
二叉堆
查看>>