Compare commits

...

11 Commits

Author SHA1 Message Date
MrZ626
eb5c3c3be5 版本推进 2021-12-24 00:08:46 +08:00
MrZ626
a5b9206694 修正联网对战结算的l'pm公式算的其实是lpm 2021-12-24 00:06:43 +08:00
MrZ626
375e67bdc4 微调框架坐标系相关细节 2021-12-24 00:06:40 +08:00
MrZ626
724a576aa3 跟进框架更新 2021-12-23 21:03:11 +08:00
MrZ626
ed47dcb90c 框架新增onResize 2021-12-23 21:03:05 +08:00
MrZ626
64b08a5a4d 修复录像界面导入导出按钮隐藏状态错误 2021-12-23 14:00:30 +08:00
MrZ626
baed0153a2 两个节日主题颜色浅一些 2021-12-23 13:48:39 +08:00
MrZ626
46d95b33e4 播放立体声音效限制输入值范围 2021-12-23 13:19:01 +08:00
MrZ626
200d270fee 框架会给场景提供触摸id 2021-12-22 21:22:19 +08:00
MrZ626
a8628275a0 大量指数接近动画改为基于时间而不是帧 2021-12-22 02:19:42 +08:00
MrZ626
20a1d2bcc1 修正框架主循环刷新率控制 2021-12-21 23:35:32 +08:00
21 changed files with 89 additions and 68 deletions

View File

@@ -107,17 +107,16 @@ local function updatePowerInfo()
gc_clear(0,0,0,.25) gc_clear(0,0,0,.25)
if state~='unknown'then if state~='unknown'then
gc_setLineWidth(4) gc_setLineWidth(4)
local charging=state=='charging'
if state=='nobattery'then if state=='nobattery'then
gc_setColor(1,1,1) gc_setColor(1,1,1)
gc_setLineWidth(2) gc_setLineWidth(2)
gc_line(74,SCR.safeX+5,100,22) gc_line(74,5,100,22)
elseif pow then elseif pow then
if charging then gc_setColor(0,1,0) if state=='charging'then gc_setColor(0,1,0)
elseif pow>50 then gc_setColor(1,1,1) elseif pow>50 then gc_setColor(1,1,1)
elseif pow>26 then gc_setColor(1,1,0) elseif pow>26 then gc_setColor(1,1,0)
elseif pow==26 then gc_setColor(.5,0,1) elseif pow==26 then gc_setColor(.5,0,1)
else gc_setColor(1,0,0) else gc_setColor(1,0,0)
end end
gc.rectangle('fill',76,6,pow*.22,14) gc.rectangle('fill',76,6,pow*.22,14)
if pow<100 then if pow<100 then
@@ -249,13 +248,13 @@ function love.touchpressed(id,x,y)
x,y=ITP(xOy,x,y) x,y=ITP(xOy,x,y)
lastX,lastY=x,y lastX,lastY=x,y
WIDGET.cursorMove(x,y) WIDGET.cursorMove(x,y)
if SCN.touchDown then SCN.touchDown(x,y)end if SCN.touchDown then SCN.touchDown(x,y,id)end
if kb.hasTextInput()then kb.setTextInput(false)end if kb.hasTextInput()then kb.setTextInput(false)end
end end
function love.touchmoved(_,x,y,dx,dy) function love.touchmoved(id,x,y,dx,dy)
if SCN.swapping then return end if SCN.swapping then return end
x,y=ITP(xOy,x,y) x,y=ITP(xOy,x,y)
if SCN.touchMove then SCN.touchMove(x,y,dx/SCR.k,dy/SCR.k)end if SCN.touchMove then SCN.touchMove(x,y,dx/SCR.k,dy/SCR.k,id)end
WIDGET.drag(x,y,dx/SCR.k,dy/SCR.k) WIDGET.drag(x,y,dx/SCR.k,dy/SCR.k)
end end
function love.touchreleased(id,x,y) function love.touchreleased(id,x,y)
@@ -268,7 +267,7 @@ function love.touchreleased(id,x,y)
WIDGET.unFocus() WIDGET.unFocus()
SCN.mainTouchID=false SCN.mainTouchID=false
end end
if SCN.touchUp then SCN.touchUp(x,y)end if SCN.touchUp then SCN.touchUp(x,y,id)end
if(x-lastX)^2+(y-lastY)^2<62 then if(x-lastX)^2+(y-lastY)^2<62 then
if SCN.touchClick then SCN.touchClick(x,y)end if SCN.touchClick then SCN.touchClick(x,y)end
if showClickFX then SYSFX.newTap(3,x,y)end if showClickFX then SYSFX.newTap(3,x,y)end
@@ -492,6 +491,8 @@ function love.lowmemory()
MES.new('check',"[auto GC] low MEM 设备内存过低") MES.new('check',"[auto GC] low MEM 设备内存过低")
end end
end end
local onResize=NULL
function love.resize(w,h) function love.resize(w,h)
if SCR.w==w and SCR.h==h then return end if SCR.w==w and SCR.h==h then return end
SCR.resize(w,h) SCR.resize(w,h)
@@ -499,8 +500,7 @@ function love.resize(w,h)
if SCN.resize then SCN.resize(w,h)end if SCN.resize then SCN.resize(w,h)end
WIDGET.resize(w,h) WIDGET.resize(w,h)
FONT.reset() FONT.reset()
onResize(w,h)
SHADER.warning:send('w',w*SCR.dpi)
end end
local onFocus=NULL local onFocus=NULL
@@ -706,7 +706,6 @@ function love.run()
if FCT>=100 then if FCT>=100 then
FCT=FCT-100 FCT=FCT-100
local safeX=SCR.safeX
gc_replaceTransform(SCR.origin) gc_replaceTransform(SCR.origin)
gc_setColor(1,1,1) gc_setColor(1,1,1)
BG.draw() BG.draw()
@@ -717,16 +716,14 @@ function love.run()
TEXT_draw() TEXT_draw()
--Draw cursor --Draw cursor
if mouseShow then if mouseShow then drawCursor(time,mx,my)end
drawCursor(time,mx,my)
end
gc_replaceTransform(SCR.xOy_ul)
MES_draw()
gc_replaceTransform(SCR.origin) gc_replaceTransform(SCR.origin)
MES_draw()
--Draw power info. --Draw power info.
if showPowerInfo then if showPowerInfo then
gc_setColor(1,1,1) gc_setColor(1,1,1)
gc_draw(infoCanvas,safeX,0,0,SCR.k) gc_draw(infoCanvas,SCR.safeX,0,0,SCR.k)
end end
--Draw scene swapping animation --Draw scene swapping animation
@@ -741,6 +738,8 @@ function love.run()
FONT.set(20) FONT.set(20)
mStr(VERSION.string,0,-30) mStr(VERSION.string,0,-30)
gc_replaceTransform(SCR.xOy_dl) gc_replaceTransform(SCR.xOy_dl)
local safeX=SCR.safeX/SCR.k
--Draw FPS --Draw FPS
FONT.set(15) FONT.set(15)
gc_setColor(1,1,1) gc_setColor(1,1,1)
@@ -823,7 +822,7 @@ function love.run()
end end
_=timer()-lastFrame _=timer()-lastFrame
if _<sleepInterval*.9626 then WAIT(.0162-sleepInterval*.9626)end if _<sleepInterval*.9626 then WAIT(sleepInterval*.9626-_)end
while timer()-lastFrame<sleepInterval do end while timer()-lastFrame<sleepInterval do end
end end
end end
@@ -858,6 +857,8 @@ end
function Z.setOnFocus(func)onFocus=assert(type(func)=='function'and func,"Z.setOnFocus(func): func must be a function")end function Z.setOnFocus(func)onFocus=assert(type(func)=='function'and func,"Z.setOnFocus(func): func must be a function")end
function Z.setOnResize(func)onResize=assert(type(func)=='function'and func,"Z.setOnResize(func): func must be a function")end
function Z.setOnQuit(func)onQuit=assert(type(func)=='function'and func,"Z.setOnQuit(func): func must be a function")end function Z.setOnQuit(func)onQuit=assert(type(func)=='function'and func,"Z.setOnQuit(func): func must be a function")end
return Z return Z

View File

@@ -30,4 +30,8 @@ function MATH.interval(v,low,high)
end end
end end
function MATH.expApproach(a,b,k)
return b+(a-b)*2.718281828459045^-k
end
return MATH return MATH

View File

@@ -1,5 +1,6 @@
local type,rem=type,table.remove local type,rem=type,table.remove
local int,rnd=math.floor,math.random local int,rnd=math.floor,math.random
local interval=MATH.interval
local sfxList={} local sfxList={}
local packSetting={} local packSetting={}
@@ -140,7 +141,7 @@ local function _play(name,vol,pos,pitch)
S=S[n]--AU_SRC S=S[n]--AU_SRC
if S:getChannelCount()==1 then if S:getChannelCount()==1 then
if pos then if pos then
pos=pos*stereo pos=interval(pos,-1,1)*stereo
S:setPosition(pos,1-pos^2,0) S:setPosition(pos,1-pos^2,0)
else else
S:setPosition(0,0,0) S:setPosition(0,0,0)

View File

@@ -19,6 +19,7 @@ local sub,ins,rem=string.sub,table.insert,table.remove
local xOy=SCR.xOy local xOy=SCR.xOy
local FONT=FONT local FONT=FONT
local mStr=GC.mStr local mStr=GC.mStr
local approach=MATH.expApproach
local downArrowIcon=GC.DO{40,25,{'fPoly',0,0,20,25,40,0}} local downArrowIcon=GC.DO{40,25,{'fPoly',0,0,20,25,40,0}}
local upArrowIcon=GC.DO{40,25,{'fPoly',0,25,20,0,40,25}} local upArrowIcon=GC.DO{40,25,{'fPoly',0,25,20,0,40,25}}
@@ -542,7 +543,7 @@ function slider:update(dt)
if ATV>0 then self.ATV=max(ATV-dt*30,0)end if ATV>0 then self.ATV=max(ATV-dt*30,0)end
end end
if not self.hide then if not self.hide then
self.pos=self.pos*.7+self.disp()*.3 self.pos=approach(self.pos,self.disp(),dt*26)
end end
end end
function slider:draw() function slider:draw()

View File

@@ -184,6 +184,9 @@ Z.setOnFnKeys({
function()for k,v in next,_G do print(k,v)end end, function()for k,v in next,_G do print(k,v)end end,
function()if love['_openConsole']then love['_openConsole']()end end, function()if love['_openConsole']then love['_openConsole']()end end,
}) })
Z.setOnResize(function(w,_)
SHADER.warning:send('w',w*SCR.dpi)
end)
do--Z.setOnFocus do--Z.setOnFocus
local function task_autoSoundOff() local function task_autoSoundOff()
while true do while true do

View File

@@ -7,6 +7,7 @@ local gc_draw,gc_rectangle,gc_line,gc_printf=gc.draw,gc.rectangle,gc.line,gc.pri
local ins,rem=table.insert,table.remove local ins,rem=table.insert,table.remove
local int,rnd=math.floor,math.random local int,rnd=math.floor,math.random
local approach=MATH.expApproach
local SETTING,GAME,SCR=SETTING,GAME,SCR local SETTING,GAME,SCR=SETTING,GAME,SCR
local PLAYERS=PLAYERS local PLAYERS=PLAYERS
@@ -797,7 +798,7 @@ do--function resetGameData(args)
end end
do--function checkWarning() do--function checkWarning()
local max=math.max local max=math.max
function checkWarning() function checkWarning(dt)
local P1=PLAYERS[1] local P1=PLAYERS[1]
if P1.alive then if P1.alive then
if P1.frameRun%26==0 then if P1.frameRun%26==0 then
@@ -817,7 +818,7 @@ do--function checkWarning()
end end
local _=GAME.warnLVL local _=GAME.warnLVL
if _<GAME.warnLVL0 then if _<GAME.warnLVL0 then
_=_*.95+GAME.warnLVL0*.05 _=approach(_,GAME.warnLVL0,dt*6)
elseif _>0 then elseif _>0 then
_=max(_-.026,0) _=max(_-.026,0)
end end

View File

@@ -7,6 +7,7 @@ local rnd,min=math.random,math.min
local sin,cos=math.sin,math.cos local sin,cos=math.sin,math.cos
local ins,rem=table.insert,table.remove local ins,rem=table.insert,table.remove
local setFont=FONT.set local setFont=FONT.set
local approach=MATH.expApproach
local posLists={ local posLists={
--1~5 --1~5
@@ -168,7 +169,7 @@ function NETPLY.setConnect(uid)PLYmap[uid].connected=true end
function NETPLY.setPlace(uid,place)PLYmap[uid].place=place end function NETPLY.setPlace(uid,place)PLYmap[uid].place=place end
function NETPLY.setStat(uid,S) function NETPLY.setStat(uid,S)
PLYmap[uid].stat={ PLYmap[uid].stat={
lpm=("%.1f %s"):format(S.row/S.time*60,text.radarData[5]), lpm=("%.1f %s"):format(S.piece/S.time*24,text.radarData[5]),
apm=("%.1f %s"):format(S.atk/S.time*60,text.radarData[3]), apm=("%.1f %s"):format(S.atk/S.time*60,text.radarData[3]),
adpm=("%.1f %s"):format((S.atk+S.dig)/S.time*60,text.radarData[2]), adpm=("%.1f %s"):format((S.atk+S.dig)/S.time*60,text.radarData[2]),
} }
@@ -193,14 +194,15 @@ function NETPLY.mouseMove(x,y)
end end
end end
function NETPLY.update() function NETPLY.update(dt)
for i=1,#PLYlist do for i=1,#PLYlist do
local p=PLYlist[i] local p=PLYlist[i]
local t=posList[i] local t=posList[i]
p.x=p.x*.9+t.x*.1 local d=dt*12
p.y=p.y*.9+t.y*.1 p.x=approach(p.x,t.x,d)
p.w=p.w*.9+t.w*.1 p.y=approach(p.y,t.y,d)
p.h=p.h*.9+t.h*.1 p.w=approach(p.w,t.w,d)
p.h=approach(p.h,t.h,d)
end end
end end

View File

@@ -904,10 +904,10 @@ function draw.norm(P,repMode)
setFont(25) setFont(25)
local tm=STRING.time(P.stat.time) local tm=STRING.time(P.stat.time)
gc_setColor(0,0,0,.3) gc_setColor(0,0,0,.3)
gc_print(P.score1,18,509) gc_print(ceil(P.score1),18,509)
gc_print(tm,18,539) gc_print(tm,18,539)
gc_setColor(.97,.97,.92) gc_setColor(.97,.97,.92)
gc_print(P.score1,20,510) gc_print(ceil(P.score1),20,510)
gc_setColor(.85,.9,.97) gc_setColor(.85,.9,.97)
gc_print(tm,20,540) gc_print(tm,20,540)

View File

@@ -8,6 +8,7 @@ local int,ceil,rnd=math.floor,math.ceil,math.random
local max,min,abs,modf=math.max,math.min,math.abs,math.modf local max,min,abs,modf=math.max,math.min,math.abs,math.modf
local assert,ins,rem=assert,table.insert,table.remove local assert,ins,rem=assert,table.insert,table.remove
local resume,yield,status=coroutine.resume,coroutine.yield,coroutine.status local resume,yield,status=coroutine.resume,coroutine.yield,coroutine.status
local approach=MATH.expApproach
local SFX,BGM,VOC,VIB,SYSFX=SFX,BGM,VOC,VIB,SYSFX local SFX,BGM,VOC,VIB,SYSFX=SFX,BGM,VOC,VIB,SYSFX
local FREEROW,TABLE,TEXT,TASK=LINE,TABLE,TEXT,TASK local FREEROW,TABLE,TEXT,TASK=LINE,TABLE,TEXT,TASK
@@ -2166,7 +2167,7 @@ end
--------------------------</Tick>-------------------------- --------------------------</Tick>--------------------------
--------------------------<Event>-------------------------- --------------------------<Event>--------------------------
local function _updateMisc(P) local function _updateMisc(P,dt)
--Finesse combo animation --Finesse combo animation
if P.finesseComboTime>0 then if P.finesseComboTime>0 then
P.finesseComboTime=P.finesseComboTime-1 P.finesseComboTime=P.finesseComboTime-1
@@ -2216,7 +2217,7 @@ local function _updateMisc(P)
end end
local f=P.fieldUp local f=P.fieldUp
if f~=y then if f~=y then
P.fieldUp=f>y and max(f*.95+y*.05-2,y)or min(f*.97+y*.03+1,y) P.fieldUp=f>y and max(approach(f,y,dt*6)-2,y)or min(approach(f,y,dt*3)+1,y)
end end
end end
@@ -2225,7 +2226,7 @@ local function _updateMisc(P)
if P.stat.score-P.score1<10 then if P.stat.score-P.score1<10 then
P.score1=P.score1+1 P.score1=P.score1+1
else else
P.score1=int(min(P.score1*.9+P.stat.score*.1+1)) P.score1=approach(P.score1,P.stat.score,dt*62)
end end
end end
@@ -2302,7 +2303,7 @@ local function _updateFX(P,dt)
end end
end end
end end
local function update_alive(P) local function update_alive(P,dt)
local ENV=P.gameEnv local ENV=P.gameEnv
P.frameRun=P.frameRun+1 P.frameRun=P.frameRun+1
@@ -2332,11 +2333,11 @@ local function update_alive(P)
if P.timing then P.stat.frame=P.stat.frame+1 end if P.timing then P.stat.frame=P.stat.frame+1 end
--Calculate key speed --Calculate drop speed
do do
local v=0 local v=0
for i=2,10 do v=v+i*(i-1)*72/(P.frameRun-P.dropTime[i])end for i=2,10 do v=v+i*(i-1)*72/(P.frameRun-P.dropTime[i])end
P.dropSpeed=P.dropSpeed*.99+v*.01 P.dropSpeed=approach(P.dropSpeed,v,dt)
end end
if P.gameEnv.layout=='royale'then if P.gameEnv.layout=='royale'then
@@ -2532,14 +2533,15 @@ local function update_alive(P)
::THROW_stop:: ::THROW_stop::
--B2B bar animation --B2B bar animation
if P.b2b1==P.b2b then if P.b2b1~=P.b2b then
elseif P.b2b1<P.b2b then if P.b2b1<P.b2b then
P.b2b1=min(P.b2b1*.98+P.b2b*.02+.4,P.b2b) P.b2b1=min(approach(P.b2b1,P.b2b,dt*6)+.4,P.b2b)
else else
P.b2b1=max(P.b2b1*.95+P.b2b*.05-.6,P.b2b) P.b2b1=max(approach(P.b2b1,P.b2b,dt*12)-.6,P.b2b)
end
end end
_updateMisc(P) _updateMisc(P,dt)
--[[ --[[
P:setPosition( P:setPosition(
640-150-(30*(P.curX+P.cur.sc[2])-15), 640-150-(30*(P.curX+P.cur.sc[2])-15),
@@ -2590,11 +2592,11 @@ local function update_streaming(P)
eventTime=P.stream[P.streamProgress] eventTime=P.stream[P.streamProgress]
end end
end end
local function update_dead(P) local function update_dead(P,dt)
local S=P.stat local S=P.stat
--Final average speed --Final average speed
P.dropSpeed=P.dropSpeed*.96+S.piece/S.frame*144 P.dropSpeed=approach(P.dropSpeed,S.piece/S.frame*3600,dt)
if P.gameEnv.layout=='royale'then if P.gameEnv.layout=='royale'then
P.swappingAtkMode=min(P.swappingAtkMode+2,30) P.swappingAtkMode=min(P.swappingAtkMode+2,30)
@@ -2606,7 +2608,7 @@ local function update_dead(P)
if P.b2b1>0 then if P.b2b1>0 then
P.b2b1=max(0,P.b2b1*.92-1) P.b2b1=max(0,P.b2b1*.92-1)
end end
_updateMisc(P) _updateMisc(P,dt)
end end
function Player:_die() function Player:_die()
self.alive=false self.alive=false
@@ -2664,17 +2666,17 @@ function Player:update(dt)
20 20
do do
update_streaming(self) update_streaming(self)
update_alive(self) update_alive(self,dt)
end end
end end
else else
update_alive(self) update_alive(self,dt)
end end
self.trigFrame=self.trigFrame-1 self.trigFrame=self.trigFrame-1
end end
else else
while self.trigFrame>=1 do while self.trigFrame>=1 do
update_dead(self) update_dead(self,dt)
self.trigFrame=self.trigFrame-1 self.trigFrame=self.trigFrame-1
end end
end end

View File

@@ -174,7 +174,7 @@ function scene.update(dt)
end end
end end
life1=life1*.7+life*.3 life1=MATH.expApproach(life1,life,dt*16)
if play then if play then
if inv>0 then if inv>0 then

View File

@@ -280,13 +280,13 @@ function scene.touchDown(x)
end end
end end
function scene.update() function scene.update(dt)
if state==1 then if state==1 then
local t=TIME() local t=TIME()
time=t-startTime time=t-startTime
local v=0 local v=0
for i=2,20 do v=v+i*(i-1)*.3/(t-keyTime[i])end for i=2,20 do v=v+i*(i-1)*.3/(t-keyTime[i])end
speed=speed*.99+v*.01 speed=MATH.expApproach(speed,v,dt)
if speed>maxSpeed then maxSpeed=speed end if speed>maxSpeed then maxSpeed=speed end
if arcade then if arcade then

View File

@@ -31,11 +31,11 @@ function scene.keyDown(key,isRep)
end end
end end
function scene.update() function scene.update(dt)
local t=TIME() local t=TIME()
local v=0 local v=0
for i=2,40 do v=v+i*(i-1)*.075/(t-keyTime[i])end for i=2,40 do v=v+i*(i-1)*.075/(t-keyTime[i])end
speed=speed*.99+v*.01 speed=MATH.expApproach(speed,v,dt)
if speed>maxSpeed then if speed>maxSpeed then
maxSpeed=speed maxSpeed=speed
end end

View File

@@ -298,7 +298,7 @@ local function _update_common(dt)
end end
--Warning check --Warning check
checkWarning() checkWarning(dt)
end end
function scene.update(dt) function scene.update(dt)
trigGameRate=trigGameRate+gameRate trigGameRate=trigGameRate+gameRate

View File

@@ -134,7 +134,7 @@ function scene.update(dt)
end end
local L=scene.widgetList local L=scene.widgetList
for i=1,8 do for i=1,8 do
L[i].x=L[i].x*.9+(widgetX0[i]-400+(WIDGET.isFocus(L[i])and(i<5 and 100 or -100)or 0))*.1 L[i].x=MATH.expApproach(L[i].x,(widgetX0[i]-400+(WIDGET.isFocus(L[i])and(i<5 and 100 or -100)or 0)),dt*12)
end end
end end

View File

@@ -246,7 +246,7 @@ function scene.update(dt)
for p=1,#PLAYERS do PLAYERS[p]:update(dt)end for p=1,#PLAYERS do PLAYERS[p]:update(dt)end
--Warning check --Warning check
checkWarning() checkWarning(dt)
--Upload stream --Upload stream
if not NET.spectate and P1.frameRun-lastUpstreamTime>8 then if not NET.spectate and P1.frameRun-lastUpstreamTime>8 then
@@ -265,7 +265,7 @@ function scene.update(dt)
lastUpstreamTime=PLAYERS[1].alive and P1.frameRun or 1e99 lastUpstreamTime=PLAYERS[1].alive and P1.frameRun or 1e99
end end
else else
NETPLY.update() NETPLY.update(dt)
end end
if newMessageTimer>0 then if newMessageTimer>0 then
newMessageTimer=newMessageTimer-1 newMessageTimer=newMessageTimer-1

View File

@@ -47,7 +47,7 @@ function scene.sceneInit()
(S.atk+S.dig)/S.time*60,--ADPM (S.atk+S.dig)/S.time*60,--ADPM
S.atk/S.time*60, --AtkPM S.atk/S.time*60, --AtkPM
S.send/S.time*60, --SendPM S.send/S.time*60, --SendPM
S.piece/S.time*24, --LinePM S.piece/S.time*24, --Line'PM
S.dig/S.time*60, --DigPM S.dig/S.time*60, --DigPM
} }
val={1/80,1/80,1/80,1/60,1/100,1/40} val={1/80,1/80,1/80,1/60,1/100,1/40}

View File

@@ -139,8 +139,8 @@ end
scene.widgetList={ scene.widgetList={
listBox, listBox,
WIDGET.newButton{name='export',x=180,y=640,w=140,h=80,color='lG',code=pressKey'cC',font=50,fText=CHAR.icon.export}, WIDGET.newButton{name='import',x=180,y=640,w=140,h=80,color='lB',code=pressKey'cV',font=50,fText=CHAR.icon.import},
WIDGET.newButton{name='import',x=350,y=640,w=140,h=80,color='lN',code=pressKey'cV',font=50,fText=CHAR.icon.import}, WIDGET.newButton{name='export',x=350,y=640,w=140,h=80,color='lR',code=pressKey'cC',font=50,fText=CHAR.icon.export},
WIDGET.newButton{name='play', x=700,y=640,w=170,h=80,color='lY',code=pressKey'return',font=65,fText=CHAR.icon.play}, WIDGET.newButton{name='play', x=700,y=640,w=170,h=80,color='lY',code=pressKey'return',font=65,fText=CHAR.icon.play},
WIDGET.newButton{name='delete',x=850,y=640,w=80,h=80,color='lR',code=pressKey'delete',font=50,fText=CHAR.icon.trash}, WIDGET.newButton{name='delete',x=850,y=640,w=80,h=80,color='lR',code=pressKey'delete',font=50,fText=CHAR.icon.trash},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene}, WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},

View File

@@ -22,9 +22,9 @@ function scene.sceneInit()
end end
end end
function scene.update() function scene.update(dt)
for i=1,7 do for i=1,7 do
minoRot[i]=minoRot[i]*.8+minoRot0[i]*.2 minoRot[i]=MATH.expApproach(minoRot[i],minoRot0[i],dt*12)
end end
end end
function scene.draw() function scene.draw()

View File

@@ -2,8 +2,8 @@ local THEME={
cur=false,--Current theme cur=false,--Current theme
} }
local themeColor={ local themeColor={
xmas={COLOR.R,COLOR.Z,COLOR.G}, xmas={COLOR.lR,COLOR.Z,COLOR.lG},
sprfes={COLOR.R,COLOR.O,COLOR.Y}, sprfes={COLOR.lR,COLOR.O,COLOR.lY},
} }
function THEME.calculate(Y,M,D) function THEME.calculate(Y,M,D)

View File

@@ -31,13 +31,19 @@ return[=[
修改一行HPC的判定 修改一行HPC的判定
前两个TSD增加一点重力 前两个TSD增加一点重力
混战模式AI攻击目标稍微正常一些 混战模式AI攻击目标稍微正常一些
两个有颜色的节日主题颜色浅一些
代码: 代码:
调整帧率控制算法 调整帧率控制算法
BGM模块允许瞬启停 BGM模块允许瞬启停
SFX模块立体声优化
升级主循环帧率控制
框架更加可独立
修复: 修复:
自定义场地界面按超过第三个的鼠标键会报错 自定义场地界面按超过第三个的鼠标键会报错
经典模式h和u难度没有干旱计数器 #546 经典模式h和u难度没有干旱计数器 #546
自定义场地16号色的方块名位置显示错误 自定义场地16号色的方块名位置显示错误
联网对战结算的l'pm公式错写成lpm的
录像界面导入导出按钮隐藏状态错误
登录界面读取本地账号密码数据错误 登录界面读取本地账号密码数据错误
策略堆叠模式评级标准不当 策略堆叠模式评级标准不当
云存档/读档的一处小问题 云存档/读档的一处小问题

View File

@@ -1,5 +1,5 @@
return{ return{
["apkCode"]=422, ["apkCode"]=423,
["code"]=1701, ["code"]=1701,
["string"]="V0.17.1", ["string"]="V0.17.1",
["room"]="ver A-2", ["room"]="ver A-2",