mirror of
https://github.com/Coloryr/AllMusic.git
synced 2026-11-08 18:54:44 +00:00
Merge pull request #108 from MinaRelayer/fix/ktv-lyric-scroll
fix: 修复 KTV 模式长歌词错位[AI]
This commit is contained in:
17 files changed
+69
-15
No files matched your search
+1
-1
@@ -285,7 +285,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (TextItem item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -283,7 +283,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -195,7 +195,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -202,7 +202,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -196,7 +196,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -204,7 +204,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -191,7 +191,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (TextItem item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -285,7 +285,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (TextItem item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -283,7 +283,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -282,7 +282,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -203,7 +203,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -196,7 +196,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -204,7 +204,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -192,7 +192,7 @@ public class CoreRenderTarget extends TextFrameBuffer {
|
||||
for (var item : texts) {
|
||||
Point2f point = AllMusicHud.getPos(Math.min(maxWidth, item.textWidth), item.textHeight, x, y, dir);
|
||||
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, offsetX % item.textWidth, item.scale);
|
||||
drawLoop(alpha, point.x, point.y + item.y, 0, item.y, item.textWidth, item.textHeight, maxWidth, getOffset(item) % item.textWidth, item.scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -76,6 +76,7 @@ public class AllMusicHud {
|
||||
private HudPosObj save;
|
||||
private float lyricState = 0.0f;
|
||||
private long lyricTime = -1;
|
||||
private int lyricWidth;
|
||||
private int pgOffset;
|
||||
private float picScale;
|
||||
private BufferedImage bg2;
|
||||
@@ -235,6 +236,24 @@ public class AllMusicHud {
|
||||
if (save == null || ktv == null || lyricTime == -1) return;
|
||||
lyricTime += 10;
|
||||
kUpdate();
|
||||
updateKtvOffset();
|
||||
}
|
||||
|
||||
private void updateKtvOffset() {
|
||||
if (ktv == null || save == null || lyricWidth <= 0) {
|
||||
lyricRender.clearKtvOffset();
|
||||
lyricKtvRender.clearKtvOffset();
|
||||
return;
|
||||
}
|
||||
|
||||
float offset = 0;
|
||||
int maxWidth = save.lyric.maxWidth;
|
||||
if (maxWidth > 0 && lyricWidth > maxWidth) {
|
||||
offset = (lyricWidth - maxWidth) * lyricState;
|
||||
}
|
||||
|
||||
lyricRender.setKtvOffset(offset);
|
||||
lyricKtvRender.setKtvOffset(offset);
|
||||
}
|
||||
|
||||
private void loopTick() {
|
||||
@@ -508,6 +527,8 @@ public class AllMusicHud {
|
||||
allWidth = Math.max(allWidth, AllMusicCore.bridge.getTextWidth(item));
|
||||
}
|
||||
|
||||
lyricWidth = allWidth;
|
||||
|
||||
lyricKtvRender.resize(allWidth, allHeight);
|
||||
lyricKtvRender.use();
|
||||
for (String item : temp) {
|
||||
@@ -519,6 +540,7 @@ public class AllMusicHud {
|
||||
}
|
||||
lyricKtvRender.unUse();
|
||||
} else {
|
||||
lyricWidth = 0;
|
||||
lyricKtvRender.clear();
|
||||
}
|
||||
|
||||
@@ -612,6 +634,10 @@ public class AllMusicHud {
|
||||
public void setKtv(long time, KtvLyricObj pack2) {
|
||||
ktv = pack2;
|
||||
lyricTime = time;
|
||||
if (pack2 == null) {
|
||||
lyricRender.clearKtvOffset();
|
||||
lyricKtvRender.clearKtvOffset();
|
||||
}
|
||||
}
|
||||
|
||||
public void setTime(long time, long now) {
|
||||
|
||||
@@ -11,6 +11,10 @@ public abstract class TextFrameBuffer {
|
||||
protected int nowWidth, nowHeight;
|
||||
protected long offsetX;
|
||||
protected boolean isDraw;
|
||||
/**
|
||||
* KTV模式下的强制滚动偏移,>=0 时优先使用
|
||||
*/
|
||||
protected float ktvOffset = -1;
|
||||
|
||||
// 最大公约数(GCD)
|
||||
public static long gcd(long a, long b) {
|
||||
@@ -59,6 +63,30 @@ public abstract class TextFrameBuffer {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置KTV模式下的强制滚动偏移
|
||||
*/
|
||||
public void setKtvOffset(float offset) {
|
||||
this.ktvOffset = offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除KTV模式下的强制滚动偏移,恢复默认滚动
|
||||
*/
|
||||
public void clearKtvOffset() {
|
||||
this.ktvOffset = -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前应使用的水平滚动偏移
|
||||
*/
|
||||
protected float getOffset(TextItem item) {
|
||||
if (ktvOffset >= 0) {
|
||||
return ktvOffset;
|
||||
}
|
||||
return offsetX % item.textWidth;
|
||||
}
|
||||
|
||||
public static class TextItem {
|
||||
public final float renderWidth;
|
||||
public final float renderHeight;
|
||||
|
||||
Reference in new issue
Block a user