修复录像(流)的一帧误差问题,移除玩家keyRec属性

This commit is contained in:
MrZ626
2021-02-14 03:15:37 +08:00
parent fd5455e71f
commit b06d07bd47
4 changed files with 49 additions and 57 deletions

View File

@@ -36,10 +36,8 @@ local function pressKey(P,keyID)
P.keyPressing[keyID]=true
P.actList[keyID](P)
if P.control then
if P.keyRec then
ins(P.keyTime,1,GAME.frame)
P.keyTime[11]=nil
end
ins(P.keyTime,1,GAME.frame)
P.keyTime[11]=nil
end
P.stat.key=P.stat.key+1
end
@@ -50,22 +48,20 @@ end
local function pressKey_Rec(P,keyID)
if P.keyAvailable[keyID]and P.alive then
local L=GAME.rep
ins(L,GAME.frame+1)
ins(L,GAME.frame)
ins(L,keyID)
P.keyPressing[keyID]=true
P.actList[keyID](P)
if P.control then
if P.keyRec then
ins(P.keyTime,1,GAME.frame)
P.keyTime[11]=nil
end
ins(P.keyTime,1,GAME.frame)
P.keyTime[11]=nil
end
P.stat.key=P.stat.key+1
end
end
local function releaseKey_Rec(P,keyID)
local L=GAME.rep
ins(L,GAME.frame+1)
ins(L,GAME.frame)
ins(L,32+keyID)
P.keyPressing[keyID]=false
end
@@ -102,7 +98,6 @@ local function newEmptyPlayer(id,mini)
P.frameWait=rnd(30,120)
P.draw=PLY.draw.small
else
P.keyRec=true--If calculate keySpeed
P.draw=PLY.draw.norm
end
P.randGen=love.math.newRandomGenerator(GAME.seed)

View File

@@ -118,26 +118,25 @@ function update.alive(P,dt)
S.time=S.time+dt
S.frame=S.frame+1
end
if P.keyRec then--Update speeds
local frame=GAME.frame
--Calculate key speed
do
local v=0
for i=2,10 do v=v+i*(i-1)*7.2/(frame-P.keyTime[i]+1)end
for i=2,10 do v=v+i*(i-1)*7.2/(GAME.frame-P.keyTime[i]+1)end
P.keySpeed=P.keySpeed*.99+v*.1
v=0
for i=2,10 do v=v+i*(i-1)*7.2/(frame-P.dropTime[i])end
for i=2,10 do v=v+i*(i-1)*7.2/(GAME.frame-P.dropTime[i])end
P.dropSpeed=P.dropSpeed*.99+v*.1
end
if GAME.modeEnv.royaleMode then
v=P.swappingAtkMode
if P.keyPressing[9]then
P.swappingAtkMode=min(v+2,30)
else
local tar=#P.field>15 and 4 or 8
if v~=tar then
P.swappingAtkMode=v+(v<tar and 1 or -1)
end
if GAME.modeEnv.royaleMode then
v=P.swappingAtkMode
if P.keyPressing[9]then
P.swappingAtkMode=min(v+2,30)
else
local tar=#P.field>15 and 4 or 8
if v~=tar then
P.swappingAtkMode=v+(v<tar and 1 or -1)
end
end
end
@@ -340,15 +339,16 @@ function update.alive(P,dt)
updateTasks(P)
end
function update.dead(P,dt)
if P.keyRec then
local S=P.stat
P.keySpeed=P.keySpeed*.96+S.key/S.frame*144
P.dropSpeed=P.dropSpeed*.96+S.piece/S.frame*144
--Final average speeds
if GAME.modeEnv.royaleMode then
P.swappingAtkMode=min(P.swappingAtkMode+2,30)
end
local S=P.stat
--Final average key speed
P.keySpeed=P.keySpeed*.96+S.key/S.frame*144
P.dropSpeed=P.dropSpeed*.96+S.piece/S.frame*144
if GAME.modeEnv.royaleMode then
P.swappingAtkMode=min(P.swappingAtkMode+2,30)
end
if P.falling>=0 then
P.falling=P.falling-1
if P.falling<0 then

View File

@@ -270,30 +270,29 @@ function scene.update(dt)
touchMoveLastFrame=false
updateVirtualkey()
GAME.frame=GAME.frame+1
--Counting, include pre-das
if checkStart()then return end
--Update players
for p=1,#PLAYERS do PLAYERS[p]:update(dt)end
--Warning check
checkWarning()
--Upload stream
if GAME.frame-lastUpstreamTime>8 then
local stream
stream,upstreamProgress=dumpRecording(GAME.rep,upstreamProgress)
if #stream>0 then
wsWrite("S"..data.encode("string","base64",stream))
else
ins(GAME.rep,GAME.frame+1)
ins(GAME.rep,GAME.frame)
ins(GAME.rep,0)
end
lastUpstreamTime=PLAYERS[1].alive and GAME.frame or 1e99
end
--Counting, include pre-das
if checkStart()then return end
--Update players
for p=1,#PLAYERS do
PLAYERS[p]:update(dt)
end
--Warning check
checkWarning()
end
function scene.draw()

View File

@@ -125,16 +125,12 @@ end
function scene.update(dt)
local _
local P1=PLAYERS[1]
local GAME=GAME
touchMoveLastFrame=false
updateVirtualkey()
GAME.frame=GAME.frame+1
--Replay
if GAME.replaying then
_=GAME.replaying
local P1=PLAYERS[1]
local L=GAME.rep
while GAME.frame==L[_]do
local key=L[_+1]
@@ -151,21 +147,23 @@ function scene.update(dt)
GAME.replaying=_
end
touchMoveLastFrame=false
updateVirtualkey()
GAME.frame=GAME.frame+1
--Counting, include pre-das
if checkStart()then return end
--Update players
for p=1,#PLAYERS do
PLAYERS[p]:update(dt)
end
for p=1,#PLAYERS do PLAYERS[p]:update(dt)end
--Warning check
checkWarning()
--Fresh royale target
if GAME.modeEnv.royaleMode and GAME.frame%120==0 then
freshMostDangerous()
end
--Warning check
checkWarning()
end
local function drawAtkPointer(x,y)