Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

調査クエスト: GomlNode#remove() がおかしい #569

Open
ahy4 opened this issue Apr 25, 2018 · 3 comments
Open

調査クエスト: GomlNode#remove() がおかしい #569

ahy4 opened this issue Apr 25, 2018 · 3 comments

Comments

@ahy4
Copy link

ahy4 commented Apr 25, 2018

と思う。気になったので少しだけ検証はした。

実際に消えてほしいNodeとは別のものが消える。removeChildも同様。

メモ: https://grimoirejs.slack.com/archives/C04CQQR6D/p1524666122000852

定義:

  public remove(): void {
    this.children.forEach((c) => {
      c.remove();
    });
    this._sendMessageForced("$$dispose");
    this.removeAllListeners();
    delete GrimoireInterface.nodeDictionary[this.id];
    if (this._parent) {
      this._parent.detachChild(this);
    } else {
      this.setMounted(false);
      if (this.element.parentNode) {
        this.element.parentNode.removeChild(this.element);
      }
    }
    this._deleted = true;
  }
  public removeChild(child: GomlNode): void {
    const node = this.detachChild(child);
    if (node) {
      node.remove();
    }
  }

背景

http://jsdo.it/ahyahya4/eT05

これをつくったけど、消えるべきでないコインが消えてびっくりした。

registerComponetの$update内のthis.node.remove()が該当箇所で、代わりにscene.removeChild(this.node)も試したけど同じ挙動をした。

そもそも俺がremoveChildの使い方を間違えてるってことはある?

ほんじゃあどうするか

いいだしっぺの法則ありますか?

@ahy4
Copy link
Author

ahy4 commented Apr 25, 2018

https://github.com/GrimoireGL/GrimoireJS/blob/master/test/Node/GomlNodeTest.ts
https://github.com/GrimoireGL/GrimoireJS/blob/master/test/Node/GomlNode2Test.ts

このへんでtestは用意されてるっぽいんだけど、回数に関しては1度ずつなので最低限しか保証されてないぽい

上のサンプルだと何回もやっているので、それが原因かもしれない。

そもそも毎回そのバグが発生しているのかどうか目視で確認できない

@kyasbal
Copy link
Member

kyasbal commented May 4, 2018

あとで見とく

@cx20
Copy link

cx20 commented May 4, 2018

事象としては、別のノードが消えるというより、別のノードに紐づいたメッシュ?が表示されなくなっている、という気がします。
image

Inspector では mesh が存在し enabled にもなっているにも関わらず、表示されないケースがある模様。
https://github.com/GrimoireGL/grimoirejs-fundamental/blob/master/src/Components/MeshRendererComponent.ts#L124
↑ この条件に通らないケースが発生している?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants