Ryo-9399 / mc_canvas

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ボスが表示されなくなる時があるバグ

urotaichi opened this issue · comments

setSystemDrawMode(4)で何も描画しないにした後、
ボスを再描画させるためにはdrawSystemObject(7)を指定する必要がありますが、
mcs_screen_sizeで1を指定して解像度を大きくした場合、主人公がボスに接近していない時はボスが描画されません。

drawGamescreenJSS.tsのdrawBossLegacy内でボスを描画させる条件として定数が含まれているのが原因です。

const drawBossLegacy = function (this: MainProgram) {
if (this.co_b.c <= 50) return;
const { wx, wy } = this.maps;
/**
* ボスのゲーム画面上のX座標
* @type {number}
*/
const boss_wx = this.co_b.x - wx;
/**
* ボスのゲーム画面上のY座標
* @type {number}
*/
const boss_wy = this.co_b.y - wy;
if (boss_wx >= 528) return;
/**

この関数自体内容が古く、FX15で追加されたボスの新しい動きを設定しても描画されなくなるので(Java版から)
drawGamescreenJSS.tsのdrawBossに統一したほうが良いかもしれません。

canvasまさおアップローダのv0.00.1とv0.01を比較すると、
v0.00.1ではセンクウザのバリアの座標

this.vo_pa_x[i] = boss_wx + 16 + Math.cos(rad) * 50;
this.vo_pa_y[i] = boss_wy + 16 + Math.sin(rad) * 50;

に2.8と同様にMath.floorが使われていましたが、v0.01ではなぜか消えているのでJava版に近づけるためにMath.floorの処理を復活させた方がよさそうです。

2.8では元からちゃんとMath.floorが使われています。

case Boss.PATTERN_BOSS3_BARRIER_LEFT:
drawWide(238, 2, 2, boss_wx - 16, boss_wy - 16);
if (this.j_v_c <= 0) {
this.j_v_kakudo += 2;
if (this.j_v_kakudo > 360) this.j_v_kakudo -= 360;
}
this.gg.os_g.setColor(Color.white);
for (let i = 0; i < 6; i++) {
const rad = ((this.j_v_kakudo + i * 60) * Math.PI) / 180;
this.vo_pa_x[i] = boss_wx + 16 + Math.floor(Math.cos(rad) * 50);
this.vo_pa_y[i] = boss_wy + 16 + Math.floor(Math.sin(rad) * 50);
}
this.gg.os_g.drawPolygon(this.vo_pa_x, this.vo_pa_y, 6);
for (let i = 0; i < 6; i++) {
const rad = ((360 - this.j_v_kakudo + i * 60) * Math.PI) / 180;
this.vo_pa_x[i] = boss_wx + 16 + Math.floor(Math.cos(rad) * 50);
this.vo_pa_y[i] = boss_wy + 16 + Math.floor(Math.sin(rad) * 50);
}
this.gg.os_g.drawPolygon(this.vo_pa_x, this.vo_pa_y, 6);
break;

追記 自機用のアイテムのバリアでも同様の現象が発生しています。