今天我们来试着移动图片吧!

首先,一样先把图片放到PIXI的stage中:

let app = new PIXI.Application({

width: 800,

height: 600,

backgroundColor: 0x1099bb

});

let imageURL =“./image/bunny.png”;

PIXI.loader

.add('bunny',imageURL)

.load(init);

function init(loader,resources){

let bunny = new PIXI.Sprite(

resources['bunny'].texture

);

app.stage.addChild(bunny);

}

但是,一直显示在左上角实在是有点麻烦,我们可以这样写(vmwork):

function init(loader,resources){

let bunny = new PIXI.Sprite(

resources['bunny'].texture

);

bunny.x = app.screen.width / 2;

bunny.y = app.screen.height / 2;

bunny.scale.set(3.5,3.5);

app.stage.addChild(bunny);

}

把bunny的x,y设为canvas的一半,并用scale把大小设为3.5倍。

接着我们监听鼠标事件:

function init(loader,resources){

let bunny = new PIXI.Sprite(

resources['bunny'].texture

);

bunny.x = app.screen.width / 2;

bunny.y = app.screen.height / 2;

bunny.scale.set(3.5,3.5);

bunny.anchor.set(0.5);

mouseEvent(bunny);

app.stage.addChild(bunny);

}

function mouseEvent(bunny){

bunny.interactive = true;

bunny.buttonMode = true;

bunny.on('mousedown',onDragStart)

.on('mouseup',onDragEnd)

}

记得要把监听的物件的interactive设为true,否则会无法触发!

buttonMode是让鼠标靠近图片时会转为手指图案(截图弄不出来只能用说明的)。

然后,撰写监听事件,让图片按下时会透明。

function onDragStart(event){

this.alpha = 0.5;

}

function onDragEnd(){

this.alpha = 1;

}

接着我们需要能按下拖移:

bunny.on('mousedown',onDragStart)

.on('mouseup',onDragEnd)

.on('mousemove',onDragMove);

function onDragStart(event){

this.alpha = 0.5;

this.dragging = true;

}

function onDragEnd(){

this.alpha = 1;

this.dragging = false;

}

function onDragMove(event){

if(this.dragging){

let newPosition = event.data.getLocalPosition(this.parent);

this.x = newPosition.x;

this.y = newPosition.y;

}

}

首先,我们先对bunny新增一个dragging属性,判断鼠标按下及放开的状态;

接着再设定移动时,如果dragging为true,利用getLocalPosition取得bunny.parent的坐标位置,并同时更新bunny的坐标位置。

就可以顺利移动了喔(leafor)!

那么PixiJS就先到这边告一段落了,一样如果有错误及来源未附上欢迎留言指正,我们明天见!

学JS的心路历程 - PixiJS -基础(三)的更多相关文章

  1. 学JS的心路历程 - PixiJS -基础(一)

    建立canvas 今天开始我们一步步来看怎么使用PixiJS吧! 在开始之前,要先提醒各位需要先运行webserver,否则将会遇到一些奇怪的问题喔! 最基本的canvas画布是肯定需要的,Pixi提 ...

  2. 学JS的心路历程-Promise(三)

    今天我们来说then一些特殊情况以及Promise.all()与Promise.race(). 我们都知道函式作为参数传入时,可以参照的方式传入,也能传入时执行拿回传值作使用: function us ...

  3. 学JS的心路历程Day28 - PixiJS -基础(二)

    材质暂存(texture cache) 昨天有说到,图片要放入stage前,需要先把图片转成Sprite的特殊图片物件. 但是我们也可以先将图片放进材质暂存(texture cache). 什么是「材 ...

  4. 学JS的心路历程Day26 - PixiJS -入坑

    后来知道也可以透过canvas让网页动起来! 而PixiJS是使用WebGL在canvas上绘制内容与制作动态 且同时有下列特色: 支持多点触控 掩码与混合模式 可外加WebGL滤镜 多装置支持 等等 ...

  5. 学JS的心路历程 -函式(三)this

    this是什么,取决于被呼叫的呼叫地点. 昨天有提到说,呼叫函式时候会传递隐含参数:arguments和this并讲解了arguments,今天我们就来探讨this吧! 什么是this 我们都会呼叫函 ...

  6. 学JS的心路历程-物件与原型(三)

    昨天有说明到函式与建构式的原型,及指定建构式函式原型为另一个建构式函式,但其实这会造成复写constructor的问题. 复写constructor的问题(vmwork) 我们昨天有提到「建构式函式可 ...

  7. 学JS的心路历程-物件与原型(一)

    前两天说明面向对象的三大特性及JS不符合面向对象,只能称作支持面向对象而已,今天我们来看看JS的原型继承. 首先我们先来看,什么是原型(vmwork): 两个物件之间的原型关系(prototype r ...

  8. 学JS的心路历程-JS支持面向对象?(一)

    昨天在看Prototype看到JS支持面向对象,被前辈问到说那什么是面向对象?JS是面向对象语言吗? 便开始了一连串艰辛爬文过程,今天就来看一下两者有什么差异吧(rgwyjc)! 首先面向对象有三大特 ...

  9. 学JS的心路历程-闭包closure

    闭包是是纯函式语言的一个特性,也是JS的一个关键性的特色,虽然不了解也能开发程序,但我们不是这种人对吧? 闭包不仅可以减少某些高阶功能的代码数量和复杂度,并且可以让我们做到原本无法做的复杂功能.听到这 ...

随机推荐

  1. Flume数据采集准备

    , flume的官网:http://flume.apache.org/ flume的下载地址:http://flume.apache.org/download.html 这里我们用的是apache版本 ...

  2. 深度学习 + OpenCV,Python实现实时视频目标检测

    使用 OpenCV 和 Python 对实时视频流进行深度学习目标检测是非常简单的,我们只需要组合一些合适的代码,接入实时视频,随后加入原有的目标检测功能. 在本文中我们将学习如何扩展原有的目标检测项 ...

  3. Java 6- Java 运算符

    计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运 ...

  4. svn下copy项目后定位到新资源库,产生不同版本号的方法

    转载于http://blog.csdn.net/u012990533/article/details/44776465 最近这两天,公司要做国际化的开发,本打算要用struts2内置的i18n拦截器做 ...

  5. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  6. Linux free -m 详解命令

    如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看. 1 2 3 4 5 6 $ free -m                total       used    ...

  7. Java压缩图片的实现类

    package com.function; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; ...

  8. oracle 多行合并为一行

    sys_connect_by_path select i,ltrim(max(sys_connect_by_path(a,',')),',') afrom(select i,a,d,min(d) ov ...

  9. mongodb的Limit|skip|投影|排序|消除重复

    Limit 方法limit():用于读取指定数量的文档 语法: db.集合名称.find().limit(NUMBER) 参数NUMBER表示要获取文档的条数 如果没有指定参数则显示集合中的所有文档 ...

  10. 重识linux-linux主机上的用户信息传递

    1 查询用户 w,who,last,lastlog 1)在线用户查询  w ,who 2)账号最近的登录时间  last lastlog 2 用户对谈 write,mesg,wall 1)write ...