pixi之动画
一、循环动画
let sprite;
Loader.add("images/imgs.json").load(setup);
function setup() {
//利用orange图片贴图生成精灵
let texture = TextureCache["orange.png"];
sprite = new PIXI.Sprite(texture);
//在渲染之前替换纹理贴图
sprite.texture = TextureCache['gakki.jpg'];
sprite.x = ;
sprite.y = ;
//将精灵实例添加到场景
app.stage.addChild(sprite);
//为pixi循环添加事件
app.ticker.add(delta => gameLoop(delta));
} function gameLoop(delta){
sprite.x += +delta;
}
应该很好理解吧,delta参数值代表帧的部分的延迟。你可以把它添加到元素的位置,让元素移动的速度和帧率无关,就像上面代码所示一样;
是否加进去这个delta的值其实是一种审美的选择。它往往只在你的动画没法跟上60帧的速率时候出现(比如你的游戏运行在很老旧的机器上)。
如果你不需要这个参数的话,你的代码可以简化成这样:
let sprite;
Loader.add("images/imgs.json").load(setup);
function setup() {
//利用orange图片贴图生成精灵
let texture = TextureCache["orange.png"];
sprite = new PIXI.Sprite(texture);
//在渲染之前替换纹理贴图
sprite.texture = TextureCache['gakki.jpg'];
sprite.x = ;
sprite.y = ;
//将精灵实例添加到场景
app.stage.addChild(sprite);
//为pixi循环添加事件
app.ticker.add(gameLoop);
} function gameLoop(){
sprite.x += ;
}
我们再来谈谈app.tick.add()的原理:
通过该方法,会将事件逐个添加到了一个事件队列,然后通过requestAnimationFrame()来执行这些方法,该方法类似于setInterval(),只不过比他更为流畅,该API是以帧为单位的,一般1s==60帧,所以每一帧这些函数都会跑一次,1秒跑60次,所以肉眼看起来就会流畅很多了。
二、按键动画
动画,始终是要由人操控的,所以我们卡可以通过键盘的key相关事件来处理,动画的移动
首先,我们利用工厂模式,新建一个keyboard工厂类来实现键盘事件的监听(这里通过函数的方式新建工厂类):
function keyboard(keyCode) {
  let key = {
    code : keyCode,
    isDown : false,
    isUp : true,
    press : undefined,
    release : undefined
  };
  //The `downHandler`
  key.downHandler = event => {
    if (event.keyCode === key.code) {
      if (key.isUp && key.press) key.press();
      key.isDown = true;
      key.isUp = false;
    }
    event.preventDefault();
  };
  //The `upHandler`
  key.upHandler = event => {
    if (event.keyCode === key.code) {
      if (key.isDown && key.release) key.release();
      key.isDown = false;
      key.isUp = true;
    }
    event.preventDefault();
  };
  //Attach event listeners
  window.addEventListener(
    "keydown", key.downHandler.bind(key), false
  );
  window.addEventListener(
    "keyup", key.upHandler.bind(key), false
  );
  return key;
}
虽然代码简单,但是还是要提一下,首先初始化按键状态:keyCode、按键是Up状态的、down的回调key.press和up的回调key.release;
按下键盘时,如果按下的键盘的keyCode和我们定义的按键code一致并且该按键状态为up,那么执行该按键的presss事件;
松开键盘,同理。
let left = keyboard(),
up = keyboard(),
right = keyboard(),
down = keyboard(); left.press = () => {
sprite.vx = -;
sprite.vy = ;
};
left.release = () => {
if (!right.isDown && sprite.vy === ) {
sprite.vx = ;
}
}; right.press = () => {
sprite.vx = ;
sprite.vy = ;
};
right.release = () => {
if (!left.isDown && sprite.vy === ) {
sprite.vx = ;
}
};
上述代码我们定义了上下左右四个键(对应ASCII码值分别为37~40),并且:
left键按下时触发的press事件为精灵x轴速度为-5,也就是向左走,left键松开的时候触发的release事件中如果right键没有按下并且上下键没有按(vy==0),那么精灵的x轴速度变为0(停止)。
其余同理。
在这里提一下,因为循环动画一旦开启那就会一直执行,页面按着一定的规律逐帧渲染,所以,我们只有通过改变元素的移动速度来间接地使其运动/停止。
pixi之动画的更多相关文章
- 在pixi中使用你的自定义着色器
		通过几天的学习,对openGL.shader有了一个大致的了解. 回到学习的初衷吧,在基于pixi.js重构D3项目的时候,因为精灵层级的问题,我得按照一定的先后顺序将不同类别的精灵添加到场景中去. ... 
- 利用pixi.js制作精灵动画
		CSS Sprites 技术对于广大的前端工程师来说应该是一点也不陌生.国内开发者昵称为CSS精灵,通过一定的技术手段,让精灵动起来,我称其为精灵动画,那么目前有哪些实现方式 呢?下面让我们详细的聊聊 ... 
- HTML5骨骼动画Demo | 使用min2d、createjs、pixi播放spine动画
		Spine做骨骼动画是比较流行的,使用起来可能相对复杂,但功能毕竟强大,所以市场占有率较大. 在unity.cocos2d.starling中使用spine已经很成熟了,而HTML5这一块可能刚刚起步 ... 
- 2d动画开发之PIXI开发
		简单的移动小游戏只要引入pixi.min.js就可以, 如果要用spine动画(龙骨也支持导出spine格式的)就要引入pixi-spine.js 如果还有声音的支持引入pixi-sound.js 学 ... 
- PIXI AnimatedSprite 及打字爆炸动画(5)
		效果 : 消除字母 当前位置出现爆炸效果 这里使用到了AnimatedSprite 动画 Members An AnimatedSprite is a simple way to display a ... 
- 动画requestAnimationFrame
		前言 在研究canvas的2D pixi.js库的时候,其动画的刷新都用requestAnimationFrame替代了setTimeout 或 setInterval 但是jQuery中还是采用了s ... 
- pixi.js教程中文版--基础篇
		前言 Pixi.js使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库.提供无缝 C ... 
- pixi.js
		添加基本文件(库文件) 渲染库 pixi.js pixi.lib.js是pixi.js的子集,依赖class.js,cat.js,event_emiter.js文件 pixi.scroller.js ... 
- Javascript之pixi框架学习
		pixi 创建渲染器(renderer) 创建一个可以播放动画的区域,相当于(canvas). var renderer = PIXI.autoDetectRenderer(512, 512); do ... 
随机推荐
- 翻译:Addressing tiles: same tile bounds with different indexes
			原文链接:http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/ Addressing tiles: same ... 
- How To Mine Bitcoins 比特币挖矿
			linux 下查看 gpu 的信息: sudo lshw -C display windows下查看cuda信息:In directory C:\Program Files\NVIDIA Corpor ... 
- Openstack(八)部署镜像服务glance
			8.1glance镜像服务介绍 Glance是OpenStack镜像服务组件,glance服务默认监听在9292端口,其接收REST API请求,然后通过其他模块(glance-registry及im ... 
- html基础之css标签
			css style: 里面的写的就叫做css,每一个样式的间隔用英文分号, 全部相同的时候引用class. css有三种写法: 1.在head标签中增加style标签,在style标签中去写css样式 ... 
- centos7上安装php5.6
			配置yum源 追加CentOS 6.5的epel及remi源. # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel- ... 
- uva11020 set
			有n个人,每个人有两个属性x,y.如果对于一个人P(x,y) 不存在另外一个人(x',y') 使得x'<x,y'<=y 或者 x'<=x,y'<y 我们说p是有优势的,每次给出 ... 
- Vue学习笔记之Vue组件
			0x00 前言 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例 ... 
- bzoj1615 / P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler
			P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler 细节题.$O(n^{2})$的$bfs$可过. #include<iostream> ... 
- python第三方库PIL安装的各种坑
			PIL python的图像处理库,pycharm安装屡次失败,始终报错 果断换依旧报错,查遍所有博客, 有给pip加参数的,pip install PIL --allow-external PIL - ... 
- vim 安装vim-airline
			在.vimrc中添加 Plugin 'vim-airline/vim-airline' Plugin 'vim-airline/vim-airline-themes' 然后打开vim编辑器执行 :Pl ... 
