Chap_16 纹理切换与帧频动画

一、概念

[wm_notice]

  • 纹理 :图片元素中显示的内容
  • 纹理切换:更换图片中显示的内容,可以让元素中的内容产生变化

[/wm_notice]

二、元素与纹理

元素与纹理通常一起创建

//  图片元素				 纹理
var plane = new PIXI.Sprite.fromImage("img/plane1.png");

plane就是图片元素 而 "img/plane.png" 就是纹理

创建纹理

语法

var 变量名 =  new PIXI.Texture.fromImage("路径");

var texture = new PIXI.Texture.fromImage("img/plane1.png");

创建图片元素并添加纹理

语法

var 变量名 = new PIXI.Sprite(纹理变量)

var plane = new PIXI.Sprite(texture);

修改图片元素中的纹理

语法

元素名.texture = 新纹理;

//创建纹理1
var t1 = new PIXI.Texture.fromImage("img/plane1.png");
var t2 = new PIXI.Texture.fromImage("img/plane2.png");
//创建图片元素并添加纹理 t1
var plane = new PIXI.Sprite( t1 );
//将plane元素中的纹理更改为t2
plane.texture  = t2;

三、通过快速切换纹理实现帧频动画

[wm_notice]PIXI中提供了一些可以通过快速切换纹理实现帧频动画的方法[/wm_notice]

运行效果

如下图所示

第一步 :准备一个存放所有纹理路径的数组

//用于保存所有纹理路径的数组
var ts = [];
//向数组中添加纹理路径
ts.push("img/planplay_1.png");
ts.push("img/planplay_2.png");
ts.push("img/planplay_3.png");
ts.push("img/planplay_4.png");
ts.push("img/planplay_5.png");
ts.push("img/planplay_6.png");
//略.....

第二步:创建纹理播放器

语法
var 变量名 = PIXI.extras.AnimatedSprite.fromImages( 纹理数组 );

var as = new PIXI.extras.AnimatedSprite.fromImages( ts );

第三步:调整属性并在应用中添加播放器

//创建纹理播放器
var as = new PIXI.extras.AnimatedSprite.fromImages( ts );
//设置播放器位置
as.x = 200;
as.y = 200;
//在应用中添加播放器
app.stage.addChild( as );

第四步:设置播放速度

播放速度0~1,数值越小速度越慢

语法

纹理播放器.animationSpeed = 播放速度;

//设置动画播放速度
as.animationSpeed = 0.15;

第五步:播放动画

语法

纹理播放器.play();

as.play();

完整代码

var app = new PIXI.Application(500,700);
document.body.appendChild( app.view );
			
//用于保存所有纹理路径的数组
var ts = [];
//向数组中添加纹理路径
ts.push("img/planplay_1.png");
ts.push("img/planplay_2.png");
ts.push("img/planplay_3.png");
ts.push("img/planplay_4.png");
ts.push("img/planplay_5.png");
ts.push("img/planplay_6.png");
ts.push("img/planplay_7.png");
ts.push("img/planplay_8.png");
ts.push("img/planplay_9.png");
ts.push("img/planplay_10.png");
ts.push("img/planplay_11.png");
			
//创建纹理播放器
var as = new PIXI.extras.AnimatedSprite.fromImages( ts );
//设置播放器位置
as.x = 200;
as.y = 200;
//在应用中添加播放器
app.stage.addChild( as );
//设置动画播放速度
as.animationSpeed = 0.15;
//播放动画
as.play();

 

chap13_帧频控制与动画效果

一、定时(计时)动画

[wm_notice]概念:让元素按照一定的时间间隔变化[/wm_notice]

实现方式

  • 已知帧频函数每秒执行60次,可以自定义计数变量,当帧频函数执行时计数变量+1
  • 当计数变量的值为60时,证明帧频函数被调用了60次,也就是过了1秒

示例代码

//略......
//自定义计数变量
var count =  1;
			
//自定义帧频函数(每秒调用60次)
function animate(){
	//在console窗口中输出count变量
	console.log( count );
				
	//帧频函数执行一次,计数变量+1
	count++;
}
//在应用中添加帧频函数
app.ticker.add(animate);

[wm_tips]如果count变量的值为60,证明帧频函数执行了60次 ,时间过了1秒 当count变量的值为60时,执行一次动画效果并将count变量的值重置为0,重新计数[/wm_tips]

示例代码

var app = new PIXI.Application(500,700);
document.body.appendChild( app.view );
			
//添加图片(敌机图片)
var enemy1 = new PIXI.Sprite.fromImage("img/enemy1.png");
app.stage.addChild( enemy1 );
			
//自定义计数变量
var count =  1;
			
//自定义帧频函数(每秒调用60次)
function animate(){
				
	//如果count变量为60证明animate函数执行了60次,也就是过了1秒
	if(count == 60){
		//敌机向下移动30px
		enemy1.y += 30;
		//重置count变量,重新计时
		count = 0;
	}
				
	//帧频函数执行一次,计数变量+1
	count++;
}

//在应用中添加帧频函数
app.ticker.add(animate);

二、定时创建元素与动画效果

[wm_notice]在某个时间周期内创建多个元素并添加动画,让多个元素按照固定的频率变化[/wm_notice]

示例:每秒创建一架敌机

var app = new PIXI.Application(500,700);
document.body.appendChild( app.view );
			
//创建图片元素 (背景图片)
var bg = new PIXI.Sprite.fromImage("img/bg2.jpg");
app.stage.addChild( bg );
			
//定义变量,计时器
var count = 1;
			
//自定义帧频函数【核心代码,在帧频函数中添加元素】
function animate(){
	//时间过1秒,count等于60
	if(count == 60){
		//添加图片元素(敌机图片)
		var enemy1 =  new  PIXI.Sprite.fromImage("img/enemy1.png");
		//Math.random() * n 获取0~n-1之间的随机数
		enemy1.y = Math.random() *(700 - 74 +1);
		enemy1.x = Math.random() *(500 - 104 +1);
		app.stage.addChild( enemy1 );	
		//重置count变量,重新计时
		count=0;
	}
	//帧频函数执行一次,计数变量+1
	count++;
}
			
//添加帧频函数
app.ticker.add( animate );

示例:让飞机向下移动

1、animate函数会反复执行,与循环的效果一致,在animate函数中创建的元素会不断的被覆盖
使用数组,将animate函数创建的每架飞机存储起来避免被覆盖
2、遍历数组获取每架飞机,执行动画

如果飞机移出边界,那么该元素就没有存在的价值了,可以 从数组中移除该元素

//遍历数组获取每架敌机元素,添加动画效果
for(var i=0;  i<enemyList.length;  i++){
	//从数组中提取敌机元素
	var e = enemyList[i];
	//敌机向下移动 
	e.y+=3;
	//如果敌机移出边界,从数组中移除该元素 
	if(e.y>=700)enemyList.splice(i,1);
}

从数组中移除的元素并不会消失在应用窗口中,必须手动从应用窗口中移除

//遍历数组获取每架敌机元素,添加动画效果
for(var i=0;  i<enemyList.length;  i++){
	//从数组中提取敌机元素
	var e = enemyList[i];
	//敌机向下移动 
	e.y+=3;
	//如果敌机移出边界,从数组中移除该元素 
	if(e.y>=700){
        //将敌机从数组中移除
		enemyList.splice(i,1);
		//将敌机从应用窗口中移除
		app.stage.removeChild( e );
	}	
}

chap9_javascript添加的新知识代码与练习

添加的新知识代码

//设置飞机可移动的边界(包含僚机)
if(pos.x < 110) plane.x = 110;//左侧边界
if(pos.x > 400) plane.x = 400;//右侧边界
if(pos.y < 55)  plane.y = 55;//顶部边界
if(pos.y > 637) plane.y = 637;//底部边界
//在console中输出鼠标的x坐标与y坐标 便于调试
console.log(pos.x+" "+pos.y);
//获取随机数
Math.random() :会得到一个0~1的随机数(包含0不包含1)
Math.random() * 10 :会得到一个0~9的随机数
Math.random() * 100:会得到一个0~99的随机数
Math.random() * n  :会得到一个0~n-1 的随机数
//样式
enemy1.x = Math.random() *(513-113);

练习步骤

1.在页面中创建一个应用窗口(宽:512,高700)

2.在应用窗口中添加背景图片(宽:512默认,高1400)

3.让背景图片能够在应用窗口中向下移动,并在移出窗口前回到原始位置

4.添加云层图片,并实现云层下移

5.添加敌机1,为敌机添加血条,实现敌机1在随机x坐标位置下移

5.1添加敌机2,为敌机添加血条,实现敌机2在随机x坐标位置下移*

6.添加子弹元素

7.添加主战机,让主战机可以发射子弹

8.在主站机左右两侧添加僚机

9.让主站机与僚机能够跟随鼠标移动,但不能移出应用窗口(设置边界)

10.添加经验值图片 ,并实现经验值图标在随机x坐标位置下移

11.添加血条图标(HP+空血条+血条)

12.添加得分文本

参考代码

chap7_图片位控

[wm_tips]图片元素不仅可以添加给舞台,也可以将元素添加给另一个元素 多个元素之间将产生关联,进而达到操控一张图片就可以控制多张图片位置的效果[/wm_tips]

一、元素组合

将独立的多个元素合并到一起,视为一个整体,便于程序对多个元素的统一处理 在程序中可以将一个元素添加到另外一个中,合并为一个整体

示例

//创建图片元素(主站机图片)
var plane = new PIXI.Sprite.fromImage("img/plane_blue_01.png");
plane.x = 200;
plane.y = 400;
//设置锚点
plane.anchor.set(0.5,0.5);
app.stage.addChild( plane );
//创建图片元素(僚机)
var liaoji1 = new PIXI.Sprite.fromImage("img/liaoji4.png");
//将元素添加到另一个元素中(合并)
plane.addChild( liaoji1 );

代码讲解

// plane : 主战机元素
// addChild() : 添加元素
// liaoji1 :  僚机元素
plane.addChild( liaoji1 );

[wm_warn]注意:辅元素添加到主元素中时,辅元素的默认起始位置等于主元素的锚点 当为辅元素设置位置时(x,y),x与y表示的是辅元素与主元素之间的距离[/wm_warn]

如下图所示

[wm_notice]此时僚机的x与y将作为与主战机的距离,向左、向上移动可以使用负数 设置好距离后移动主元素(主战机),辅元素(僚机)也会一起移动并保持一定距离(辅元素 x,y决定)[/wm_notice]

二、图片图层

图片图层:图片在应用窗口的层级 默认图层效果:先插入的元素低于后插入的元素(后插入的元素会遮盖先插入的元素) 合并元素图层效果:辅元素会与主元素图层一致并将主元素向下压一级(辅元素会遮盖主元素) 原来遮盖主元素的其他元素,现在将同时遮盖主元素与辅元素

示例

代码示例

var app = new PIXI.Application(500,700);
document.body.appendChild( app.view );
//第一个元素,层级最低的元素 主元素
var e1 = new PIXI.Sprite.fromImage("img/plane_blue_01.png");
e1.x = 200;
e1.y = 400;
app.stage.addChild(e1);
//第二个元素
var e2 = new PIXI.Sprite.fromImage("img/img_plane_item_15.png");
e2.x = 200;
e2.y = 400;
app.stage.addChild(e2);
//第三个元素
var e3 = new PIXI.Sprite.fromImage("img/liaoji1.png");
e3.x = 200;
e3.y = 400;
//e1与e3合并后 e3的图层将与e1一致,e3会将e1压在底部
e1.addChild(e3);

效果

[wm_notice]注意:当两个元素合并时,辅元素的默认宽高会受到主元素的影响,如果不希望辅元素受到影响,需要 为辅元素单独设置宽高。[/wm_notice]

Chap6_鼠标移动跟随

一、获取鼠标坐标

[wm_tips]程序会记录鼠标在元素中触发事件时的坐标位置(x,y) 我们可以通过在自定义函数中设置参数获得触发事件时的x,y[/wm_tips]

示例

var  app = new PIXI.Application(512,768);
document.body.appendChild(app.view);
var bg = new PIXI.Sprite.fromImage("img/bg_01.png");
app.stage.addChild(bg);
bg.interactive = true;
bg.on("click",move);
function move(event){
var  pos = event.data.getLocalPosition(app.stage);
var x = pos.x;
var y = pos.y;
console.log(x+"  "+y);
}

1、创建应用窗口并添加到页面中

var  app = new PIXI.Application(512,768);
document.body.appendChild(app.view);

2、创建背景图片并添加到 窗口中

var bg = new PIXI.Sprite.fromImage("img/bg_01.png");
app.stage.addChild(bg);

3、设置背景图片 可以互动

bg.interactive = true;

4、为背景图片添加mousemove事件,并在事件发生时调用move函数

bg.on("click",move);

5、定义move函数,添加event参数,通过event获取鼠标 坐标

//event :被触发的事件
//data ; 数据
//getLocalPosition ; 获取某个元素鼠标事件触发位置
//app.stage ; 仅在获取程序窗口中的鼠标位置

//var x = pos.x ; 获取事件触发时鼠标的x坐标
//var y = pos.y ;获取事件触发时鼠标的y坐标

//console.log(x+"  " +y) ; 开发者工具的控制台中输出x坐标与y坐标
function move(event){
    var pos = event.data.getLocalPosition(app.stage);
    var x = pos.x;
    var y = pos.y;
   console.log(x+"   "+y);
}

[wm_notice]任意一种鼠标事件,都可以通过上述代码获得鼠标坐标[/wm_notice]

完成效果:在单击页面窗口中的某个位置时,console中会出现坐标

二、鼠标跟随

[wm_tips]鼠标跟随,就是控制显示元素,跟随鼠标指针一起移动[/wm_tips]

思路

1.当鼠标移动时会触发mousemove事件

2.在事件中通过event.data.getLoalPosition(app.stage)获取鼠标当前坐标(x,y)

3.用获取到的x,y坐标为图片定位

4.这样图片就会跟随鼠标一起移动

代码示例

var  app = new PIXI.Application(512,768);
document.body.appendChild(app.view);
//图片元素(背景)
var bg = new PIXI.Sprite.fromImage("img/bg_01.png");
app.stage.addChild(bg);
//图片元素(飞机)
var plane = new PIXI.Sprite.fromImage("img/plane.png");
plane.x = 250;
plane.y = 250;
app.stage.addChild(plane);
bg.interactive = true;
bg.on("mousemove", movePlane);
function  movePlane(event){
  //1、获取鼠标触发事件时的位置
var pos  = event.data.getLocalPosition(app.stage);
  //2、设置元素位置与鼠标位置一致
plane.x = pos.x;
plane.y = pos.y;
}

三、设置锚点

[wm_tips]元素的锚点,也可以叫做定位点,指元素显示在某个x,y坐标时时元素以哪个点来对齐该坐标[/wm_tips]

例:当我们把飞机图片定位到200,100位置时,图片是以左上角与该位置对齐并显示在窗口中,那么此时的锚点就是左上角

设置锚点代码

元素.anchor.x = x方向锚点位置

元素.anchor.y = y方向锚点位置

元素.anchor.set(x值,y值):同时设置x、y方向锚点位置

锚点取值范围 0~1

常见锚点配置

设置锚点为左上角:
元素.anchor.x=0,元素.anchor.y=0 或 元素.anchor.set(0,0)

设置锚点为右上角:
元素.anchor.x=1,元素.anchor.y=0 或 元素.anchor.set(1,0)

设置锚点为左下角:
元素.anchor.x=0,元素.anchor.y=1 或 元素.anchor.set(0,1)

设置锚点为右下角:
元素.anchor.x=1,元素.anchor.y=1 或 元素.anchor.set(1,1)

设置锚点为中心:
元素.anchor.x=0.5,元素.anchor.y=0.5 或 元素.anchor.set(0.5,0.5)

代码示例

var plane = new PIXI.Sprite.fromImage("img/plane.png");
plane.x = 250;
plane.y = 250;
//设置锚点为中心点
plane.anchor.x = 0.5;
plane.anchor.y = 0.5;
app.stage.addChild(plane);

四、字符拼接

[wm_tips]字符与变量可以使用+号进行拼接,不变的字符内容用" "号包裹,变量用+号拼接[/wm_tips]

例:在应用窗口中显示坐标x,y

function move (event ){
    //获取鼠标触发事件时的位置
    var pos = event.data.getLocalPosition(app.stage);
    //为文本元素设置内容(x,y坐标位置)
    //"x:" +pos.x + "y:" +pos.y
    txt.text = "x:"+pos.x + "y:"+pos.y;
}

小数取整

Math.ceil(1.5); //向上取整结果为:2
parseInt(1.5); //忽略小数部分结果为:1

坐标取整后字符拼接

function move( event ){
//获取鼠标触发事件时的坐标
var pos = event.data.getLocalPosition(app.stage);
//为文本元素设置内容(x,y坐标位置)
//"x:"+pos.x + "y:"+pos.y
txt.text = "x:"+ parseInt(pos.x) + " y:" + parseInt(pos.y);

如何在本地搭建网站(视频教程)与安装配置-新手必看【原创】

西瓜君给大家纤细说下这个新手如何在本地就可以搭建一个属于自己的网站,不需要域名,不需要服务器,一键操作,下面来直接来说下。

一、安装phpstudy(小皮面板)

1.首先要官网:https://www.xp.cn 选择自己需要下载的对应版本,我在这儿就给大家以wind系统为例了

2.选择下载phpstudy版本如64位或者32位

3.下载安装好后,点击运行phpstudy安装包

4.路径尽量设置到D盘或者其他盘也可以尽量不要往C盘设置,我这儿就给大家默认了

5.耐心等待安装完成

6.安装成果后就回出现这么一个控制界面

二、面板配置

可以一键启动所需配置或者选择需要启动的套餐,这个就看个人需求了。也非常简单,一键操作,点击对应的启动按钮就好。

1.我下面给大家启动了Nginx和MySQL,给大家演示操作(其他配置看个人需求)

2.点击网站-有个管理点击-选择打开网站如果显示【站点创建成功】就是环境配置好了

三、本地搭建WprdPress博客


Chap5_事件处理

事件处理的概念

事件:表示用户在应用界面的某种操作 例如单击、双击、鼠标移动等等 ,这些操作统称为事件 事件触发:当用户正在操作某个元素时,不同的操作会触发不同的事件 事件处理:当用户触发某种事件(操作)可以执行一些代码响应用户的操作

一、鼠标常用事件介绍

鼠标事按时件,是指通过鼠标操作才能触发的事件,根据操作不同,触发的事件也不同

[wm_tips]设置页面无边框 中加入:html,body{margin:0px;border:0; } [/wm_tips]

二 、手机触控常用事件【兼容鼠标】

鼠标的点击与手机触控事件可以兼容,这样在移动端,我们也可以通过事件进行操控

三 、监听处理事件

监听 :监视用户在某个元素中触发的事件

例如:

步骤

//1、设置元素为可互动元素(权限设置)
元素名.interactive = true;
//2、监听某种事件,当用户触发该事件时执行函数
元素名.on("事件名称" , 负责处理事件的函数名);  
//3、定义负责处理事件的函数
function 函数名(){
}

代码示例

var js = new  PIXI.Sprite.fromImage("img/js1.png");
app.stage.addChild( js );
//1、设置与元素为可互动元素(权限设置)
js.interactive = true;
//2、监听、处理事件
//当鼠标在js元素中单击时,会执行handle函数中的代码
js.on("click", handle );
//3、定义处理事件的函数
function handle(){
//设置js.y坐标位置,向下移动10px
js.y = js.y+10;
}

代码讲解

(1)允许图片可以 交互

//允许js图片元素可以进行交互【重要步骤】
js.interactive = true;

(2)定义函数

// function move(){} : 自定义函数名称为move
// js.y = js.y+10 :表示 plane的垂直坐标在原有基础上+10 向下移动
// js.y = js.y+10 可以简写为 plane.y+=10;
function move(){
  js.y = js.y+10;
}

(3)处理事件

// click :单击事件
// move :当触发单击事件时,需要执行的函数
js.on("click",move);

chap4_基本常用函数

概念

函数是一段功能代码,将功能代码定义到函数中通过反复执行降低冗余代码 提高程序的可维护性、可重用性

1、定义函数基础语法

//function : 定义函数的关键字
//函数名  : 函数的标识,当需要一个函数执行时,必须指定函数名
//(参数)  : 调用时,接收一些数据
//{ }   : 调用时,需要函数完成的功能代码
function 函数名(参数){
}

2、调用函数基础语法

函数名(); //当函数被调用时,会执行函数{ }中的代码

[wm_notice]可以反复调用函数,执行代码[/wm_notice]

示例

//例:f1函数
function f1(){
//当f1函数被调用时执行
//在开发者工具的 Console 窗口中输出一段文字
console.log("Hello");
}
//2、调用函数
//语法:函数名();
f1();
f1();
f1();
f1();

[wm_notice]f1()函数被调用了4次,所以在 Console(控制台)窗口中会出现4行Hello[/wm_notice]

执行流程

3、函数的参数

在函数中可以定义一些参数,用来接收调用者传入的数据 使函数变得更加强大,更加灵活

示例

//参数:可以接受调用者传入的数据
//str :参数 ,调用者传入的数据会为str赋值
function f1(str){
//当f1函数被调用时执行
//在开发者工具的 Console 窗口中输出调用者传入的文字
console.log( str );
}
//2、调用函数
//语法:函数名(传递给函数的数据);
f1("闺中少妇不知愁");
f1("春日凝装上翠楼");
f1("忽见陌头杨柳色");
f1("悔教夫婿觅封侯");

执行流程

示例2

利用函数创建元素,提高复用性、提高可维护性

//用于创建元素添加元素的函数
//path :路径
//inx :元素x坐标位置
//iny :元素y坐标位置
function add(path,inx,iny){
//创建元素 调用者传入path
var e = new PIXI.Sprite.fromImage( path );
e.x = inx;
e.y = iny;
//在应用窗口中添加元素
app.stage.addChild( e );
}
//调用函数 传入数据
add("img/js1.png",100,100);//x = 100,y=100
add("img/js2.png",150,150);//x = 150,y=150

[wm_tips]注意:多个参数与数据,需要使用 , 分隔[/wm_tips]