[]js环境下使用Loader加载图片在Sprite对象的.on函数无效

js环境下使用Loader加载图片在Sprite对象的.on函数无效
var tempnote = new Laya.Sprite();
使用 tempnote.texture=Loader.getRes(tempjson.pic)后
tempnote.on函数不触发
使用tempnote.loadImage(tempjson.pic);
触发正常,如果我想使用Loader.getRes 来载入缓存的图片应如何处理.
已邀请:

Monica - 知识达人

赞同来自:

你说的tempnote.on函数不触发是指无法触发CLICK事件吗?如果是这样的话是你没给sprite设置宽高吧?如果不是的话请提供详细的代码!
资源预加载之后你在使用的时候直接传路径就行了,它不会重新加载,是从缓存里边取的,所以针对于图片来说的话你可以不用加loader.getRes

yinglei999

赞同来自:

非常感谢您的解答。是无法触发CLICK事件。图片是不会冲在,只是想确认下这个是否为一个问题,以下是我简单抽取的一段代码,世界设置了宽高后,退图片进行位移(即设置x,y)值后,如果使用texture替换,则位移越位部分的鼠标触发事件不会被触发

//设置背景图片
this.bgimg = new Laya.Sprite();
this.bgimg.width=2*scronw;
this.bgimg.height=2*scronh;
//加载显示图片,坐标位于0,0
var temptexture=Loader.getRes(pic);
if (typeof(temptexture)!="undefined"){
this.bgimg.texture=Loader.getRes(pic)
}else{
this.bgimg.loadImage(pic);
}

this.donghua=true;
this.bgimg.x=x;
this.bgimg.y=y;
this.bgimg.mvtox=movetox;
this.bgimg.mvtoy=movetoy;
this.bgimg.speedx=speedx;
this.bgimg.speedy=speedy;
console.log("funmovebg"+movetox);
Laya.timer.frameLoop(speed, this, funbg);
 
 

yinglei999

赞同来自:

    var Loader = Laya.Loader;
    var loaderHandler = Laya.Handler;
var scronw=640;
var scronh=960;
     //初始化展示界面   
Laya.init(scronw, scronh)
//设置舞台背景色
Laya.stage.bgColor = '#999999';
//设置适配模式
    Laya.stage.scaleMode = "exactfit";
    // 无加载失败重试
    Laya.loader.retryNum = 0;
//加载的数据信息 https://layaair.ldc.layabox.co ... oader
var urls = [
{url:"res/castlebeyond.jpg",type:Loader.IMAGE},
     ];
    //加载load侦听
Laya.loader.load(urls, loaderHandler.create(this, onAssetLoaded), loaderHandler.create(this, onLoading, null, false));
// 侦听加载失败
    Laya.loader.on(Event.ERROR, this, onError);
    this.moveover =true;
    function onAssetLoaded(texture)
    {
        console.log("加载结束");
        pic="res/castlebeyond.jpg";
        this.bgimg = new Laya.Sprite();
        this.bgimg.width=scronw;
        this.bgimg.height=scronh;
        //加载显示图片,坐标位于0,0
        var temptexture=Loader.getRes(pic);
         if (typeof(temptexture)!="undefined"){
            this.bgimg.texture=Loader.getRes(pic)
         }else{
            this.bgimg.loadImage(pic);
        }
        this.bgimg.x=0;
        this.bgimg.y=0;
        this.bgimg.mvtox=-300;
        this.bgimg.mvtoy=0;
        this.bgimg.speedx=-10;
        this.bgimg.speedy=0;
        this.bgimg.on(Laya.Event.CLICK,this,readnext);
        //添加到舞台
    Laya.stage.addChild(this.bgimg);
    }
    function onLoading(progress)
    {
        console.log("加载进度: " + Math.floor(progress*100)+"%");
    }
    function onError(err)
    {
        console.log("加载失败: " + err);
    }
    function readnext(){
        console.log("readnext");
        if (this.moveover){
            this.moveover=false;
            Laya.timer.loop(100, this, funbg);
        }else{
            console.log("clicked");
        }
        
    }
    //移动背景定时器(背景特殊,是基础部分,所以单独拿出来)
function funbg(e){
console.log("funbg");
var canmove=false;
if ( Math.abs(this.bgimg.x - this.bgimg.mvtox) > Math.abs(this.bgimg.speedx)){
this.bgimg.x=this.bgimg.x+this.bgimg.speedx;
canmove=true;
}
if ( Math.abs(this.bgimg.y - this.bgimg.mvtoy) > Math.abs(this.bgimg.speedy)) {
this.bgimg.y=this.bgimg.y+this.bgimg.speedy;
canmove=true;
}
if (!canmove){
console.log("move over");
            Laya.timer.clear(this,funbg);
            this.moveover=false;
}
}

这个是简单的一段代码
请注意如果初始化不设置

this.bgimg.width=scronw;
this.bgimg.height=scronh;
 
这个是设置宽高的地方,只有设置了才有反应,似乎是使用
this.bgimg.texture=Loader.getRes(pic) 载入数据的时候,宽度,高度都没有进行定义,需要手动进行设置,而直接用
loadImage(pic)
的时候,则宽高均自动进行了重设
 

要回复问题请先

商务合作
商务合作