love2d之路(三)一个简易弹幕射击游戏示例(上)
生活随笔
收集整理的這篇文章主要介紹了
love2d之路(三)一个简易弹幕射击游戏示例(上)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一節實現了人物的移動
?
這一節為人物加入“射擊彈幕”這個功能
?
這里需要加入一個緩動庫flux
?
需要的自取:flux緩動庫
?
那么開始:
?
1.先思考要實現什么效果
這里取巧,先不弄太復雜的
開始畫好20個彈幕,全部隱掉,按下射擊鍵,彈幕1的位置設置到人物的位置上,播放彈幕1的緩動動畫,再次按下射擊鍵,彈幕2的位置設置到人物的位置上,播放彈幕2的緩動動畫,循環,到第21彈幕的時候減去20回到第一個彈幕
?
2.開始寫代碼了
先寫一個克隆方法:
clone = function(t)local c = {}for i, v in pairs(t) doif v thenif type(v) == 'table' then c[i] = clone(v)else c[i] = v endendendreturn setmetatable(c, getmetatable(t))end寫一個彈幕對象,基本的屬性,克隆20個彈幕到一個表里
function love.load()t = 1--記錄當前發射的彈幕local bullet = {x = -100,y = -100,w = 8,h = 8,speed = 40,image = love.graphics.newImage("res/ball.png"),show = false,isShoot = false}bullets = {}--存放20個子彈對象for i = 1, 20 dolocal ii = clone(bullet)table.insert(bullets, ii)endend把20個彈幕全部畫出來
function love.draw()init()endfunction init()love.graphics.setColor(255, 0, 0, 255)for i, v in pairs(bullets) dodrawBullet(v)endendfunction drawBullet(v)love.graphics.draw(v.image, v.x, v.y, 0, 1, 1, 32, 32)end完成射擊功能,然后在鍵盤偵聽加入這個方法,按下j鍵射擊
function shoot()--每次射擊使用下一個對象,第21個則循環回到1t = t + 1if t > 20 then t = t - 20 endbullets[t].show = truebullets[t].x = player.xbullets[t].y = player.ybullets[t].isShoot = trueflux.to(bullets[t], 1, { x = bullets[t].x + 30 * bullets[t].speed })endfunction love.keyreleased(key)if key == "j" thenshoot()endend?
最后,結合上一節的功能給出完整的一個示例
彈幕射擊游戲示例(一)
總結
以上是生活随笔為你收集整理的love2d之路(三)一个简易弹幕射击游戏示例(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 清理索引空间,Oracle
- 下一篇: 冒泡排序 以及利用函数升序 降序