图片示例,简陋的图,记录下落过程,

1、创建应用实例并添加到DOM元素上。

(会看到一个黑色画布,没有任何元素,接下来会在画布上创建文字)

2、创建  TextStyle 用来设置要显示字体样式

3、随机产生字母(code,x, y,speed,isHas)  创建坐标及是否要创建该对象 (Text)

4、把字母渲染到画布上,从上到下运行

5、监听keyup事件,消除相应的数组

1、创建应用添加DOM

  let app = new PIXI.Application({
width: 526,
height: 526
})
document.body.appendChild(app.view);

2、创建字体样式(我抄官网的)

   // 字体样式
let style = new PIXI.TextStyle({
fontFamily: "Arial",
fontSize: 36,
fill: "white",
stroke: '#ff3300',
strokeThickness: 4,
dropShadow: true,
dropShadowColor: "#000000",
dropShadowBlur: 4,
dropShadowAngle: Math.PI / 6,
dropShadowDistance: 6,
});

 3、创建随机文字对象并添加数组中,文字移动是对数组操作  

  var getRandom = function () {
var charCode = 97 + Math.floor(Math.random() * 26);
var speed = Math.ceil(Math.random() * 4);
return {
code: String.fromCharCode(charCode),
speed: speed,
y: 0,
x: Math.floor(Math.random() * app.view.width),
isHas: false //标记改对象是否需要创建,创建后true,不需要每次都创建
}
};

4、数组变量

  var showArr = [];  //每次随机创建文字位置
var txtoObjArr = []; // 在下边用来存储,Text对象,,下边看

随机产生文字 放到showArr数组中:

showArr.push(

getRandom()

);

// {x: 100, y:0, code: 'b' ,isHas: false}

txtoObjArr 里边存放的 new PIXI.Text();每次都会产生新的对象。判断该对象是否已创建 isHas,存在直接使用,否则创建

5、添加舞台

app.stage.addChild(txtoObjArr[j]);

6、让  txtoObjArr 里边的每个对象动起来(txtoObjArr   里边存放的是new PIXI.Text), 到画布底边销毁对象

    for(var k = 0; k < txtoObjArr.length; k ++){
console.log(txtoObjArr)
// app.stage.addChild(txtoObjArr[k]);
txtoObjArr[k].x = showArr[k].x;
txtoObjArr[k].y = showArr[k].y;
txtoObjArr[k].text = showArr[k].code; // 销毁对象
if(txtoObjArr[k].y >= app.view.height){
txtoObjArr[k].destroy();
txtoObjArr.splice(k,1);
showArr.splice(k, 1); // 移除数组中元素
}
}

7、键盘按下去舞台元素消失(数组移除操作)

 function keyEvent(ev){
for(var i= 0; i < showArr.length; i++){
if(showArr[i].code ==ev.key || String.fromCharCode(ev.keyCode).toLowerCase() == showArr[i].code){
showArr[i].text ='';
txtoObjArr[i].text='';
showArr.splice(i,1);
txtoObjArr.splice(i,1); }
}
}

本示例

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>test2</title>
<script src="pixi.min.js"></script>
</head>
<body> <script> let app = new PIXI.Application({
width: 526,
height: 526
})
document.body.appendChild(app.view); // 字体样式
let style = new PIXI.TextStyle({
fontFamily: "Arial",
fontSize: 36,
fill: "white",
stroke: '#ff3300',
strokeThickness: 4,
dropShadow: true,
dropShadowColor: "#000000",
dropShadowBlur: 4,
dropShadowAngle: Math.PI / 6,
dropShadowDistance: 6,
}); // 创建随机字母对象
var getRandom = function () {
var charCode = 97 + Math.floor(Math.random() * 26);
var speed = Math.ceil(Math.random() * 4);
return {
code: String.fromCharCode(charCode),
speed: speed,
y: 0,
x: Math.floor(Math.random() * app.view.width),
isHas: false
}
}; // 字母数组
var showArr = []; setInterval("createArry()", 100);
// createArry(); var txtoObjArr = [];
function createArry(){
if(Math.random() > 0.9){
showArr.push(getRandom());
// console.log(showArr);
}
// 元素运动
for(var i = 0; i< showArr.length; i++){
showArr[i].y += 1;
}
// 创建元素 for(var i = 0 ;i < showArr.length; i++){
if(showArr[i].isHas == false){ // 创建文字对象
var txtObj = new PIXI.Text("Hello Pixi!", style);
showArr[i].isHas = true;
// app.stage.addChild(txtObj);
// txtObj.x = showArr[i].x;
// txtObj.y = showArr[i].y;
// txtObj.text = showArr[i].code;
txtoObjArr.push(txtObj);
for(var j =0 ;j <txtoObjArr.length; j++){
app.stage.addChild(txtoObjArr[j]);
}
}
}
// 执行对象数组
for(var k = 0; k < txtoObjArr.length; k ++){
console.log(txtoObjArr)
// app.stage.addChild(txtoObjArr[k]);
txtoObjArr[k].x = showArr[k].x;
txtoObjArr[k].y = showArr[k].y;
txtoObjArr[k].text = showArr[k].code; // 销毁对象
if(txtoObjArr[k].y >= app.view.height){
txtoObjArr[k].destroy();
txtoObjArr.splice(k,1);
showArr.splice(k, 1); // 移除数组中元素
}
}
} function keyEvent(ev){
for(var i= 0; i < showArr.length; i++){
if(showArr[i].code ==ev.key || String.fromCharCode(ev.keyCode).toLowerCase() == showArr[i].code){
showArr[i].text ='';
txtoObjArr[i].text='';
showArr.splice(i,1);
txtoObjArr.splice(i,1); }
}
}
window.addEventListener("keyup", keyEvent);
// app.ticker.add(function (delta) {
// createArry();
// }); </script>
</body>
</html>

  

PIXI 下落文字消除(3)的更多相关文章

  1. 趣味python编程之经典俄罗斯方块

    国庆期间闲不住,用python把经典俄罗斯方块实现了一遍,找到了些儿时的乐趣.因此突发奇想,打算用python写点经典又确实有趣的小程序形成系列.正统编程之余也给自己找点儿乐趣,换个角度写程序. 原计 ...

  2. pnd3

    这两天重写了,消除后本身的下落计算还有问题,新产生的块下落和消除已经OK了.消除算法真的很要命.最后还是回归最开始的想法,用递归的方式不断的SPREAD来得到消除的数据.快到月底了,得勤写写了,要不找 ...

  3. Luogu 1312 【NOIP2011】玛雅游戏 (搜索)

    Luogu 1312 [NOIP2011]玛雅游戏 (搜索) Description Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空 ...

  4. Noip 2011 Day 1 & Day 2

    Day 1   >>> T1   >> 水题一道 . 我们只需要 for 一遍 , 由于地毯是从下往上铺的 , 我们只需要记录该位置最上面的地毯的编号 , 每一次在当前地 ...

  5. iOS—图片编辑,文字下落动画的Demo

    仿照Mac上的截图编辑功能做的一个图片编辑的Demo,功能有画矩形,圆形,箭头,手写,输入文字和分享. 做的时候看到一个大神的帖子写的一个文字动画的教程,故顺带学习做了一个类似的文字下落动画. 有兴趣 ...

  6. JS 黑客帝国文字下落效果

    黑客帝国文字下落效果 源代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  7. 如何消除类型是submit类型的按钮的默认文字 ‘确认提交’

    只需要加上value="" 即可.默认的文字就可以去掉了.

  8. js实现黑客帝国文字下落效果

    突然想到这个效果便想实现以下. 当然免不了要百度一下,于是查找到 http://www.cnblogs.com/myvin/p/4775152.html这篇文章, 效果可以查看博文中的给出的效果图.那 ...

  9. JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果

    HTML代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <l ...

随机推荐

  1. Java学习第六篇:集合类

    一.Java集合类框架 Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合:从Java5以后,J ...

  2. Java SimpleDateFormat工具类

    package AnimalDemo; import java.text.ParseException; import java.text.SimpleDateFormat; import java. ...

  3. 图的遍历——DFS

    原创 图的遍历有DFS和BFS两种,现选用DFS遍历图. 存储图用邻接矩阵,图有v个顶点,e条边,邻接矩阵就是一个VxV的矩阵: 若顶点1和顶点5之间有连线,则矩阵元素[1,5]置1,若是无向图[5, ...

  4. web开发四个作用域

    web开发一共有四个作用域,范围从高到低分为appliaction作用域(全局作用域),session作用域,request作用域和page作用域.${base}是el表达式语法,它会自动先从page ...

  5. 百度地图离线API及地图数据下载工具

    全面介绍,请看下列介绍地址,改写目前最新版本的百度V2.0地图,已全面实现离线操作,能到达在线功能的95%以上 http://api.jjszd.com:8081/apituiguang/gistg. ...

  6. Jquery的动画

    $下载链接详情点击Jquery-day01查看官方网站下载地址 Jquery-day02 1.Jquery动画使用animate-(JQ-2.1) <!DOCTYPE html> < ...

  7. 正确处理类的复合关系------新标准c++程序设计

    假设要编写一个小区养狗管理程序,该程序需要一个“主人”类,还需要一个“狗”类.狗是有主人的,主人也有狗.假定狗只有一个主人,但一个主人可以有最多10条狗.该如何处理“主人”类和“狗”类的关系呢?下面是 ...

  8. C# LINQ(7)

    大部分的LINQ的关键字都说了,最后说一下排序吧. LINQ的是查询的利器. 那么查询就会有排序. 所有LINQ提供了两种简单的排序.倒序和默认排序. 关键字是: orderby ascending ...

  9. 201621123012 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...

  10. iOS系统各个版本的占比查询

    目的:为了向大多数看齐,我们要实时了解应用系统的使用占比 1.苹果官网查询各个系统的占比: Apple 2.各种设备各种系统的占比 第三方