mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-04-11 15:47:06 +08:00
fix: click判定错误 & 位置不正确
This commit is contained in:
parent
b448f18616
commit
4b2d94e422
@ -72,6 +72,7 @@ export interface IActionEvent {
|
||||
/**
|
||||
* 当前按下了哪些按键。该值是一个数字,可以通过位运算判断是否按下了某个按键。
|
||||
* 例如通过 `buttons & MouseType.Left` 来判断是否按下了左键。
|
||||
* 注意在鼠标抬起或鼠标点击事件中,并不会包含触发的那个按键
|
||||
*/
|
||||
buttons: number;
|
||||
/** 触发时是否按下了 alt 键 */
|
||||
|
@ -822,6 +822,7 @@ export abstract class RenderItem<E extends ERenderItemEvent = ERenderItemEvent>
|
||||
}
|
||||
case ActionType.Down: {
|
||||
// 记录标识符,用于判定 click
|
||||
if (!inElement) return false;
|
||||
if (event.touch) {
|
||||
this.touchId.add(event.identifier);
|
||||
} else {
|
||||
@ -830,6 +831,7 @@ export abstract class RenderItem<E extends ERenderItemEvent = ERenderItemEvent>
|
||||
break;
|
||||
}
|
||||
case ActionType.Click: {
|
||||
if (!inElement) return false;
|
||||
if (event.touch) {
|
||||
if (!this.touchId.has(event.identifier)) {
|
||||
return false;
|
||||
@ -878,7 +880,9 @@ export abstract class RenderItem<E extends ERenderItemEvent = ERenderItemEvent>
|
||||
event: IActionEvent,
|
||||
transform: Transform
|
||||
): vec3 {
|
||||
return transform.untransformed(event.offsetX, event.offsetY);
|
||||
const x = event.offsetX + this.anchorX * this.width;
|
||||
const y = event.offsetY + this.anchorY * this.height;
|
||||
return transform.untransformed(x, y);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -236,8 +236,8 @@ export class Icon extends RenderItem<EIconEvent> implements IAnimateFrame {
|
||||
const renderable = this.renderable;
|
||||
if (!renderable) return;
|
||||
const [x, y, w, h] = renderable.render[0];
|
||||
const cw = canvas.width;
|
||||
const ch = canvas.height;
|
||||
const cw = this.width;
|
||||
const ch = this.height;
|
||||
const frame = this.animate
|
||||
? RenderItem.animatedFrame % renderable.frame
|
||||
: 0;
|
||||
|
@ -214,7 +214,9 @@ export class MotaRenderer extends Container implements IRenderTreeRoot {
|
||||
case ActionType.Move:
|
||||
case ActionType.Enter:
|
||||
case ActionType.Leave:
|
||||
case ActionType.Wheel:
|
||||
case ActionType.Wheel: {
|
||||
return this.getActiveMouseIdentifier(mouse);
|
||||
}
|
||||
case ActionType.Up:
|
||||
case ActionType.Click: {
|
||||
const id = this.getActiveMouseIdentifier(mouse);
|
||||
@ -241,14 +243,16 @@ export class MotaRenderer extends Container implements IRenderTreeRoot {
|
||||
mouse: MouseType = this.getMouseType(event)
|
||||
): IActionEvent {
|
||||
const id = this.getMouseIdentifier(type, mouse);
|
||||
const x = event.offsetX / core.domStyle.scale;
|
||||
const y = event.offsetY / core.domStyle.scale;
|
||||
return {
|
||||
target: this,
|
||||
identifier: id,
|
||||
touch: false,
|
||||
offsetX: event.offsetX,
|
||||
offsetY: event.offsetY,
|
||||
absoluteX: event.offsetX,
|
||||
absoluteY: event.offsetY,
|
||||
offsetX: x,
|
||||
offsetY: y,
|
||||
absoluteX: x,
|
||||
absoluteY: y,
|
||||
type: mouse,
|
||||
buttons: this.getMouseButtons(event),
|
||||
altKey: event.altKey,
|
||||
@ -309,8 +313,8 @@ export class MotaRenderer extends Container implements IRenderTreeRoot {
|
||||
event: TouchEvent,
|
||||
rect: DOMRect
|
||||
): IActionEvent {
|
||||
const x = touch.clientX - rect.left;
|
||||
const y = touch.clientY - rect.top;
|
||||
const x = (touch.clientX - rect.left) / core.domStyle.scale;
|
||||
const y = (touch.clientY - rect.top) / core.domStyle.scale;
|
||||
return {
|
||||
target: this,
|
||||
identifier: this.getTouchIdentifier(touch, type),
|
||||
|
@ -66,7 +66,6 @@ export function create() {
|
||||
|
||||
return () => (
|
||||
<container id="map-draw" {...mapDrawProps}>
|
||||
<icon icon={50} zIndex={100}></icon>
|
||||
<layer-group id="layer-main" ex={layerGroupExtends} ref={map}>
|
||||
<layer layer="bg" zIndex={10}></layer>
|
||||
<layer layer="bg2" zIndex={20}></layer>
|
||||
|
Loading…
Reference in New Issue
Block a user