在Snap!开源项目中如何用JavaScript返回Sprite或Stage?
在Snap!中用JavaScript获取Sprite或Stage的正确方法
嘿,作为Snap!开源项目的开发者,我来帮你搞定这个问题!先聊聊你之前尝试的几种写法的问题,再给你实用的解决方案:
你之前代码的问题分析
- 第一种写法里,
stage.children.spr是错误的:stage.children是存储所有Sprite的数组,不能用点语法通过名字直接访问,得用Stage内置的方法来查找。 - 第二种写法
return spr其实只是返回你传入的参数,并没有真正从Snap!的场景中获取Sprite实例,除非你调用时已经拿到了正确的实例,否则没什么作用。 - 第三种写法
return this.spr,这里的this是当前Sprite实例,但spr并不是SpriteMorph的内置属性,所以会返回undefined。
正确实现方式
1. 获取Stage实例
如果你是在Sprite的自定义JavaScript块中,直接通过parentThatIsA方法就能拿到Stage:
SpriteMorph.prototype.getStage = function() { // this 指向当前执行该方法的Sprite实例 return this.parentThatIsA(StageMorph); };
调用这个方法后,就能得到当前Sprite所在的Stage对象。
2. 通过名称获取指定Sprite
Stage内置了getSpriteNamed方法,可以直接通过Sprite的名字获取对应的实例,结合上面获取Stage的方法,我们可以写:
SpriteMorph.prototype.getSpriteByName = function(spriteName) { const stage = this.parentThatIsA(StageMorph); // 传入Sprite的名称字符串,返回对应的Sprite实例(找不到则返回null) return stage.getSpriteNamed(spriteName); };
比如你想获取名为"Player"的Sprite,调用getSpriteByName("Player")就可以了。
3. 获取当前执行方法的Sprite本身
如果你的需求是返回当前正在运行这个JS代码的Sprite,直接返回this就行:
SpriteMorph.prototype.getCurrentSprite = function() { return this; };
内容的提问来源于stack exchange,提问作者user12171375
相关产品推荐
相关产品推荐

