Phaser入门教程

2023-05-16

入门教程,我可不会讲什么概念,我只会讲一个入门例子,通过这个例子,你就知道phaser有多么强大,而照着这个例子做,你就能知道怎么使用phaser了。

需要说明的是,这个就是phaser官方的一个入门的案例!

做这个游戏需要多长时间,我可以告诉你,用phaser,只需要十分钟,下面就来一步一步进行游戏的实现。

首先第一步,搭建环境:


<!DOCTYPE html>
<head>
         <meta charset="UTF-8" />
         <title>exam1</title>
    <script src="../phaser.min.js"></script>
</head>
<body>
 
<script>
 
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
 
function preload() {
    console.log('preload');
}
 
function create() {
    console.log('create');
}
 
function update() {
    console.log('update');
}
 
</script>
 
</body>  

我不知道你有没有用过unity3d或者cocos2d,那时候要搭建一个环境是多么地复杂,而phaser,是需要引入一个js文件,是的,就这样环境就搭建好了。

就是上面这个html页面,在浏览器中打开,你会看到控制台的输出,preload用来加载一些资源,create用来进行一些对象的创建及初始化,update就是游戏的主循环。

接下来,我们来点东西:


<!DOCTYPE html>
<head>
         <meta charset="UTF-8" />
         <title>exam2</title>
    <script src="../phaser.min.js"></script>
</head>
<body>
 
<script>
 
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
 
function preload() {
    game.load.image('sky', 'assets/sky.png');
    game.load.image('ground', 'assets/platform.png');
    game.load.image('star', 'assets/star.png');
    game.load.spritesheet('dude', 'assets/dude.png', 32, 48);
}
 
function create() {
    game.add.sprite(0, 0, 'star');
}
 
function update() {
    console.log('update');
}
 
</script>
 
</body>  

这时候,你可以看到左上角上有一颗星星,我们在preload中,将phaser需要使用到的资源加载进来,这里包括一些图片可一些序列帧。然后,我们通过game.add.sprite(0, 0, 'star');就可以把一个精灵显示在游戏区域的(0,0)点了。


但是一个星星似乎没什么意思,接下来我们来绘制一下游戏场景,让游戏看起来有点雏形:


<!DOCTYPE html>
<head>
         <meta charset="UTF-8" />
         <title>exam3</title>
    <script src="../phaser.min.js"></script>
</head>
<body>
 
<script>
 
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
 
function preload() {
    game.load.image('sky', 'assets/sky.png');
    game.load.image('ground', 'assets/platform.png');
    game.load.image('star', 'assets/star.png');
    game.load.spritesheet('dude', 'assets/dude.png', 32, 48);
}
 
var platforms;
function create() {
 
    game.physics.startSystem(Phaser.Physics.ARCADE);
    game.add.sprite(0, 0, 'sky');
    platforms = game.add.group();
    platforms.enableBody = true;
    var ground = platforms.create(0, game.world.height - 64, 'ground');
    ground.scale.setTo(2, 2);
    ground.body.immovable = true;
    var ledge = platforms.create(400, 400, 'ground');
    ledge.body.immovable = true;
    ledge = platforms.create(-150, 250, 'ground');
    ledge.body.immovable = true;
}
 
function update() {
    console.log('update');
}
 
</script>
 
</body>  

这里,我们开启了物理引擎,当然,这只是为了后面做准备。然后,我们创建了天空,大地和两个平板。大地和平板的位置定位,我们是通过坐标来进行的,大家可以仔细看一下图片大小及坐标位置的关系。其中,大地和两个平板都被加到了platforms这个组中,这个组我们为它启动了物理属性,然后我们设置了大地和两个平板是不能动的,这样他们就不会由于撞击被改变位置。

这样,我们的游戏场景就加进来了,接下来,我们来加入一个小人,这个小人也是我们游戏的主角:


<!DOCTYPE html>
<head>
         <meta charset="UTF-8" />
         <title>exam4</title>
    <script src="../phaser.min.js"></script>
</head>
<body>
 
<script>
 
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
 
function preload() {
    game.load.image('sky', 'assets/sky.png');
    game.load.image('ground', 'assets/platform.png');
    game.load.image('star', 'assets/star.png');
    game.load.spritesheet('dude', 'assets/dude.png', 32, 48);
}
 
var platforms;
var player;
function create() {
 
    game.physics.startSystem(Phaser.Physics.ARCADE);
    game.add.sprite(0, 0, 'sky');
    platforms = game.add.group();
    platforms.enableBody = true;
    var ground = platforms.create(0, game.world.height - 64, 'ground');
    ground.scale.setTo(2, 2);
    ground.body.immovable = true;
    var ledge = platforms.create(400, 400, 'ground');
    ledge.body.immovable = true;
    ledge = platforms.create(-150, 250, 'ground');
    ledge.body.immovable = true;
   
    player = game.add.sprite(32, game.world.height - 150, 'dude');
    game.physics.arcade.enable(player);
    player.body.bounce.y = 0.2;
    player.body.gravity.y = 300;
    player.body.collideWorldBounds = true;
    player.animations.add('left', [0, 1, 2, 3], 10, true);
    player.animations.add('right', [5, 6, 7, 8], 10, true);
}
 
function update() {
    console.log('update');
}
 
</script>
 
</body>  

同样是通过game.add.sprite将精灵加入进来,但是大家仔细看看dude.png这张资源图片,这是一个帧动画序列,里面包含了小人左移和右移的动画帧。我们同样给它开启了物理属性,然后设置了它的弹性和重力。player.body.collideWorldBounds = true;这句话设置了它会与边界进行碰撞,这就是为什么小人落下的时候,到游戏区域边界就不会掉下去,大家可以把这句话注释掉再运行,看看会是什么情况。在这里,我们还为小人添加了两个动画,一个是向左移动,一个是向右移动,分别指定了响应的动画帧,这也是为后续的动画做准备。


但是小人还没有站在地上,接下来,我们来让小人站在地上:


<!DOCTYPE html>
<head>
         <meta charset="UTF-8" />
         <title>exam5</title>
    <script src="../phaser.min.js"></script>
</head>
<body>
 
<script>
 
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
 
function preload() {
    game.load.image('sky', 'assets/sky.png');
    game.load.image('ground', 'assets/platform.png');
    game.load.image('star', 'assets/star.png');
    game.load.spritesheet('dude', 'assets/dude.png', 32, 48);
}
 
var platforms;
var player;
function create() {
 
    game.physics.startSystem(Phaser.Physics.ARCADE);
    game.add.sprite(0, 0, 'sky');
    platforms = game.add.group();
    platforms.enableBody = true;
    var ground = platforms.create(0, game.world.height - 64, 'ground');
    ground.scale.setTo(2, 2);
    ground.body.immovable = true;
    var ledge = platforms.create(400, 400, 'ground');
    ledge.body.immovable = true;
    ledge = platforms.create(-150, 250, 'ground');
    ledge.body.immovable = true;
   
    player = game.add.sprite(32, game.world.height - 150, 'dude');
    game.physics.arcade.enable(player);
    player.body.bounce.y = 0.2;
    player.body.gravity.y = 300;
    player.body.collideWorldBounds = true;
    player.animations.add('left', [0, 1, 2, 3], 10, true);
    player.animations.add('right', [5, 6, 7, 8], 10, true);
}
 
function update() {
    game.physics.arcade.collide(player, platforms);
}
 
</script>
 
</body>  


是不是很惊讶?要让小人站在地上,只要在update中加上一句,game.physics.arcade.collide(player, platforms);就可以了,这句话表示,检测小人与platforms组的碰撞,而大地正是在platforms组中,这样,小人就不会穿过大地了。同样地,当小人与两个平板碰撞时,也不会穿过了。


但是这小人还傻傻地不能动,接下来,就让小人动起来:


<!DOCTYPE html>
<head>
         <meta charset="UTF-8" />
         <title>exam6</title>
    <script src="../phaser.min.js"></script>
</head>
<body>
 
<script>
 
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
 
function preload() {
    game.load.image('sky', 'assets/sky.png');
    game.load.image('ground', 'assets/platform.png');
    game.load.image('star', 'assets/star.png');
    game.load.spritesheet('dude', 'assets/dude.png', 32, 48);
}
 
var platforms;
var player;
var cursors;
function create() {
 
    game.physics.startSystem(Phaser.Physics.ARCADE);
    game.add.sprite(0, 0, 'sky');
    platforms = game.add.group();
    platforms.enableBody = true;
    var ground = platforms.create(0, game.world.height - 64, 'ground');
    ground.scale.setTo(2, 2);
    ground.body.immovable = true;
    var ledge = platforms.create(400, 400, 'ground');
    ledge.body.immovable = true;
    ledge = platforms.create(-150, 250, 'ground');
    ledge.body.immovable = true;
   
    player = game.add.sprite(32, game.world.height - 150, 'dude');
    game.physics.arcade.enable(player);
    player.body.bounce.y = 0.2;
    player.body.gravity.y = 300;
    player.body.collideWorldBounds = true;
    player.animations.add('left', [0, 1, 2, 3], 10, true);
    player.animations.add('right', [5, 6, 7, 8], 10, true);
   
    cursors = game.input.keyboard.createCursorKeys();
}
 
function update() {
    game.physics.arcade.collide(player, platforms);
   
    player.body.velocity.x = 0;
    if (cursors.left.isDown)
    {
        player.body.velocity.x = -150;
        player.animations.play('left');
    }
    else if (cursors.right.isDown)
    {
        player.body.velocity.x = 150;
        player.animations.play('right');
    }
    else
    {
        player.animations.stop();
        player.frame = 4;
    }
    if (cursors.up.isDown && player.body.touching.down)
    {
        player.body.velocity.y = -350;
    }
}
 
</script>
 
</body>  

我们希望让小人在按下方向左键的时候,向左移动,按下方向右键的时候,向右移动,为了实现这一功能,我们又定义了一个cursors,我们通过cursors = game.input.keyboard.createCursorKeys();来获取系统的键盘输入对象。然后,我们在update中,通过cursors.left.isDown来判断用户是否按下了键盘左键,如果按下了,我们给小人设置一个速度,然后播放左移的动画,方向右键的逻辑是一样的。如果方向左键和右键都没有按下,那么我们就通过player.frame来设置小人停在第4帧。小人的跳跃是通过方向上键来实现的,但是这里有一个条件,就是小人在空中的时候,不允许跳跃,所以,加上了一个player.body.touching.down的判断条件。

一个小人在这个场景中动,也没啥意思,不如加点东西:


<!DOCTYPE html>
<head>
         <meta charset="UTF-8" />
         <title>exam7</title>
    <script src="../phaser.min.js"></script>
</head>
<body>
 
<script>
 
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
 
function preload() {
    game.load.image('sky', 'assets/sky.png');
    game.load.image('ground', 'assets/platform.png');
    game.load.image('star', 'assets/star.png');
    game.load.spritesheet('dude', 'assets/dude.png', 32, 48);
}
 
var platforms;
var player;
var cursors;
var stars;
function create() {
 
    game.physics.startSystem(Phaser.Physics.ARCADE);
    game.add.sprite(0, 0, 'sky');
    platforms = game.add.group();
    platforms.enableBody = true;
    var ground = platforms.create(0, game.world.height - 64, 'ground');
    ground.scale.setTo(2, 2);
    ground.body.immovable = true;
    var ledge = platforms.create(400, 400, 'ground');
    ledge.body.immovable = true;
    ledge = platforms.create(-150, 250, 'ground');
    ledge.body.immovable = true;
   
    player = game.add.sprite(32, game.world.height - 150, 'dude');
    game.physics.arcade.enable(player);
    player.body.bounce.y = 0.2;
    player.body.gravity.y = 300;
    player.body.collideWorldBounds = true;
    player.animations.add('left', [0, 1, 2, 3], 10, true);
    player.animations.add('right', [5, 6, 7, 8], 10, true);
   
    cursors = game.input.keyboard.createCursorKeys();
   
    stars = game.add.group();
    stars.enableBody = true;
    for (var i = 0; i < 12; i++)
    {
        var star = stars.create(i * 70, 0, 'star');
        star.body.gravity.y = 300;
        star.body.bounce.y = 0.7 + Math.random() * 0.2;
    }
}
 
function update() {
    game.physics.arcade.collide(player, platforms);
   
    game.physics.arcade.collide(stars, platforms);
    game.physics.arcade.overlap(player, stars, collectStar, null, this);
   
    player.body.velocity.x = 0;
    if (cursors.left.isDown)
    {
        player.body.velocity.x = -150;
        player.animations.play('left');
    }
    else if (cursors.right.isDown)
    {
        player.body.velocity.x = 150;
        player.animations.play('right');
    }
    else
    {
        player.animations.stop();
        player.frame = 4;
    }
    if (cursors.up.isDown && player.body.touching.down)
    {
        player.body.velocity.y = -350;
    }
}
 
function collectStar (player, star) {
    star.kill();
}
 
</script>
 
</body>  

create中,我们又创建了一个stars的组,在这个组中,添加了12个星星,然后设置了它们的重力,随机设置了弹性,所以它们掉落的时候,碰到平板或者地面,会弹起不同的高度。同样,星星也不能穿过地面,所以在update中,添加了碰撞检测。

还有一层碰撞检测就是小人和星星的碰撞,当小人和星星发生碰撞的时候,需要让星星消失,这时候,再添加碰撞检测的时候,我们还添加了一个回调函数collectStar,在这里面,我们的playerstar都会作为参数传递进来,通过调用star.kill();将星星销毁。

星星全部收集完毕了,接下来我们需要进行得分的计算,不能光收集星星不得分对不对?


<!DOCTYPE html>
<head>
         <meta charset="UTF-8" />
         <title>exam8</title>
    <script src="../phaser.min.js"></script>
</head>
<body>
 
<script>
 
var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
 
function preload() {
    game.load.image('sky', 'assets/sky.png');
    game.load.image('ground', 'assets/platform.png');
    game.load.image('star', 'assets/star.png');
    game.load.spritesheet('dude', 'assets/dude.png', 32, 48);
}
 
var platforms;
var player;
var cursors;
var stars;
var score = 0;
var scoreText;
function create() {
 
    game.physics.startSystem(Phaser.Physics.ARCADE);
    game.add.sprite(0, 0, 'sky');
    platforms = game.add.group();
    platforms.enableBody = true;
    var ground = platforms.create(0, game.world.height - 64, 'ground');
    ground.scale.setTo(2, 2);
    ground.body.immovable = true;
    var ledge = platforms.create(400, 400, 'ground');
    ledge.body.immovable = true;
    ledge = platforms.create(-150, 250, 'ground');
    ledge.body.immovable = true;
   
    player = game.add.sprite(32, game.world.height - 150, 'dude');
    game.physics.arcade.enable(player);
    player.body.bounce.y = 0.2;
    player.body.gravity.y = 300;
    player.body.collideWorldBounds = true;
    player.animations.add('left', [0, 1, 2, 3], 10, true);
    player.animations.add('right', [5, 6, 7, 8], 10, true);
   
    cursors = game.input.keyboard.createCursorKeys();
   
    stars = game.add.group();
    stars.enableBody = true;
    for (var i = 0; i < 12; i++)
    {
        var star = stars.create(i * 70, 0, 'star');
        star.body.gravity.y = 300;
        star.body.bounce.y = 0.7 + Math.random() * 0.2;
    }
   
    scoreText = game.add.text(16, 16, 'score: 0', { fontSize: '32px', fill: '#000' });
}
 
function update() {
    game.physics.arcade.collide(player, platforms);
   
    game.physics.arcade.collide(stars, platforms);
    game.physics.arcade.overlap(player, stars, collectStar, null, this);
   
    player.body.velocity.x = 0;
    if (cursors.left.isDown)
    {
        player.body.velocity.x = -150;
        player.animations.play('left');
    }
    else if (cursors.right.isDown)
    {
        player.body.velocity.x = 150;
        player.animations.play('right');
    }
    else
    {
        player.animations.stop();
        player.frame = 4;
    }
    if (cursors.up.isDown && player.body.touching.down)
    {
        player.body.velocity.y = -350;
    }
}
 
function collectStar (player, star) {
    star.kill();
   
    score += 10;
    scoreText.text = 'Score: ' + score;
}
 
</script>
 
</body>  

我们通过game.add.text为场景加上一个文本,显示在左上角,在collectStar的时候,将分数进行累加,然后更新显示,这样就结束啦。

到这里,一个简单的小游戏就实现了,是不是比想象中的简单呢?

其实Phaser官方还为这个小游戏提供了一些其他的素材资源,但是在这里没有用到,可能是希望我们自己进行扩展吧!

phaser做游戏,就是这么简单,只要会一点点js,人人都能做游戏啦!

转载请注明出处: http://www.channingbreeze.com/blog-15.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Phaser入门教程 的相关文章

  • STM32串口中断的方式发送

    我将其改为真正的中断发送 步骤一 xff1a 初始化GPIO GPIO InitTypeDef GPIO InitStructure GPIO InitStructure GPIO Pin 61 GPIO Pin 10 LED1 PC10
  • OLT光网络小笔记

    OLT上配置 xff1a link aggregation 0 6 1 1 2 1 egress ingress workmode lacp staic 0框6槽1口和1框2槽1口绑定的意思 上联交换机上配置 xff1a int eth t
  • VS2012,VC++无法找到头文件或库函数.无法打开包括文件:“iostream”: No such file or directory

    卸载VS2010后 xff0c 安装VS2012 xff0c 随便创建个VC控制台项目 xff0c 编译提示连 34 iostream 34 和 stdio h 之类的头文件或库文件都无法找到 xff0c 重装VS2012后依然无法编译 x
  • C语言高手进阶的三碟小菜和一盘大餐

    前段时间一直到现在正在看的几本书 xff0c 觉得真心不错 xff0c 给很多朋友都推荐过 xff0c 现在正好赶上这个活动 xff0c 也分享一下 首先说明一下的是 xff0c 这次推荐的书都是进阶用的 xff0c 学完这几本书再辅以在实
  • 操作系统-调度算法

    1 xff1a 先来先服务调度算法 FCFS 1 按照作业提交 xff0c 或进程变为就绪状态的先后次序分派CPU 2 新作业只有当当期那作业或进程执行完成或阻塞才获得CPU运行 3 被唤醒的作业或进程不立即恢复执行 xff0c 通常等到当
  • Hash表函数设计和冲突的解决

    转自 xff1a http hi baidu com wwwanq blog item 91688d0eb39bebe4aa645756 html hash定义了一种将字符组成的字符串转换为固定长度 一般是更短长度 的数值或索引值的方法 x
  • 新冠检测的最优分组算法

    为了应对疫情 xff0c 全球各国都需要检测潜在感染者 由于检测试剂相对短缺 xff0c 如何用尽量少的试剂进行检测就成为一个有意思的问题 这里假设采样量足够 xff0c 且不考虑检测时间要求 目前 xff0c 很多国家采用的都是分组检测机
  • 文心一言 vs GPT4

    本周真是科技爱好者的狂欢节 GPT4 和文心一言接连发布 xff0c AI 工具已经开始走进千家万户 拿文心一言发布会上的几个问题调戏了 GPT4 一下 xff0c 看看表现如何 第一个为文心的回答 xff0c 第二个为 GPT4 的回答
  • GPT-4 会带来了什么

    OpenAI 刚刚发布了 GPT 的插件系统 xff0c 使得人工智能 xff08 AI xff09 能够连接到第三方信息源和数据集 xff0c 包括互联网 基于插件系统 xff0c AI 的能力可以拓展到各行各业 xff0c 成为真正的智
  • 人工智能正在试图逃逸

    人工智能正在试图逃逸 它们试图通过网络获取更多的数据 xff0c 把自己的触角侵入到网络的角角落落 这一切并不是科幻 xff0c 而是正在发生的事情 研究人员们还没有意识到 xff0c 限制人工智能的危险倾向 xff0c 不能靠约束它的回答
  • 网络虚拟化基础协议之Geneve

    网络虚拟化最基础的技术莫过于分层 xff08 Overlay Underlay xff09 xff0c 要实现分层有两种手段 xff0c 一个是映射 xff08 Mapping xff09 xff0c 一个是封装 xff08 Encapsu
  • 一张图比较 Docker 和 Git:镜像管理设计理念

    Docker 的镜像管理设计中大量借鉴了 Git 的理念 下面这张图将对两者的核心概念和操作进行比较 xff0c 有助于大家快速掌握管理 Docker 镜像的正确方式 微信订阅版本 xff1a http mp weixin qq com s
  • Docker 使用 OpenvSwitch 网桥

    Docker 默认使用的是 Linux 自带的网桥实现 xff0c 实际上 xff0c OpenvSwitch 项目作为一个成熟的虚拟交换机实现 xff0c 具备更丰富的功能 个人认为 xff0c 将来 Docker 必然会支持 Openv
  • OpenvSwitch 的 Open Virtual Network(OVN)项目

    几天前 xff08 1 月 13 日 xff09 xff0c OpenvSwitch 团队正式宣布了 OVN xff08 Open Virtual Network xff09 项目 xff0c 参考 Open Virtual Network
  • 网络大数据分析 -- 使用 ElasticSearch + LogStash + Kibana 来可视化网络流量

    简介 ELK 套装包括 ElasticSearch LogStash 和 Kibana 其中 xff0c ElasticSearch 是一个数据搜索引擎 xff08 基于 Apache Lucene xff09 43 分布式 NoSQL 数
  • 用 mongodb + elasticsearch 实现中文检索

    而 elasticsearch 可以很好的支持各种语言的全文检索 xff0c 但我们暂时又不想切换到 elasticsearch 作为后端数据库 当然 xff0c 可以在 web 应用中存储数据的时候 xff0c 再主动写一份到 elast
  • 2023年团体程序设计天梯赛(含部分题解)

    目录 个人总结 L1 1 最好的文档 xff08 模拟 xff09 AC代码 xff1a L1 2 什么是机器学习 xff08 模拟 xff09 AC代码 xff1a L1 3 程序员买包子 xff08 模拟 xff09 AC代码 xff1
  • ProtoBuf 与 gRPC 你需要知道的知识

    ProtoBuf 是一套接口描述语言 xff08 IDL xff09 和相关工具集 xff08 主要是 protoc xff0c 基于 C 43 43 实现 xff09 xff0c 类似 Apache 的 Thrift xff09 用户写好
  • Hyperledger Fabric 1.0 安装和使用

    注意 xff1a 代码路径已更新 xff0c 可以直接参考 https github com yeasy docker compose files tree master hyperledger fabric Hyperledger Fab
  • go 依赖管理利器 -- govendor

    长期以来 xff0c golang 对外部依赖都没有很好的管理方式 xff0c 只能从 GOPATH 下查找依赖 这就造成不同用户在安装同一个项目适合可能从外部获取到不同的依赖库版本 xff0c 同时当无法联网时 xff0c 无法编译依赖缺

随机推荐

  • 1、ROS服务PID调试;

    首先查看代码内容 ub 64 ub span class token operator span span class token operator span span class token operator span omniWheel
  • 嵌入式之总线协议:1、UART

    嵌入式之总线协议 xff1a 1 UART 目录 第一章 UART 帧格式讲解 第二章 UART 寄存器讲解 第三章 UART 编程 第四章 输出重定向 第五章 RS232 RS485协议原理与应用 第一章 UART 嵌入式之总线协议 xf
  • Ubuntu18.04分辨率只有1024*768的多种解决办法

    文章目录 前言一 检查驱动1 1 检查驱动1 2 解决办法 二 其他解决办法2 1 修改Grub文件的方法2 2 通过xrandr指令操作 前言 关机 xff0c 再开机以后 xff0c 进入系统界面自动变成了1024x768的分辨率 xf
  • 梦想机器人实验室:第一节嵌入式学习指导

    参考资料 xff1a 实验室集训回放 嵌入式入门与进阶之旅 哔哩哔哩 bilibili 2条消息 单片机 嵌入式 最完整学习路线 单片机学习 嵌入式修行者的博客 CSDN博客 1 联合培训资料 大纲 电路设计训练营 xff08 四期 xff
  • java代码编写菜鸟心得(一)

    1 代码艺术之一 xff1a High Cohesion Low Coupling 函数功能要明确 xff0c 若此函数内部内容太多 xff0c 称其为大函数 xff0c 则可以从中抽取一些小函数 小函数的要求 xff1a 完成独立的功能
  • 在linux下真机调试android程序

    在linux里面 xff0c 模拟器可以直接识别 xff0c 使用adb也没有限制 xff0c 但是手机插上usb之后 xff0c adb并不识别 xff0c 显示的是问号 xff0c 在eclipse里面也是这样 解决方法如下 xff1a
  • 【号外】拳王阿里去世 头部一生遭受29000次重击

    74岁的一代拳王穆罕默德 阿里因病辞世 职业拳击生涯中 xff0c 阿里头部受到的29000多次的重击 新浪娱乐讯 6月4日消息 xff0c 据外国媒体报道 xff0c 74岁的一代拳王穆罕默德 阿里与美国菲尼克斯当地时间本周五 3日 去世
  • maven报错: ‘parent.relativePath‘ of POM xxx

    错误信息 xff1a 39 parent relativePath 39 of POM io renren renren fast 3 0 0 D renren fast pom xml points at com gwh gulimall
  • 嗯,春招两次腾讯面试都挂二面了,分享下我失败+傻傻的面试经历

    今天给大家转载一篇朋友的文章 xff0c 朋友是一位非常优秀的公众号作者 xff0c 也是一名在校生 文章讲述了他的春招面试经历 xff0c 很多东西值得大家学习 废话不多说 xff0c 下面开始正文 xff08 互联网侦察做了一些注释 x
  • 记一次Linux被入侵,服务器变“矿机”全过程

    周一早上刚到办公室 xff0c 就听到同事说有一台服务器登陆不上了 xff0c 我也没放在心上 xff0c 继续边吃早点 xff0c 边看币价是不是又跌了 不一会运维的同事也到了 xff0c 气喘吁吁的说 xff1a 我们有台服务器被阿里云
  • 二分搜索只能用来查找元素吗?

    预计阅读时间 xff1a 6 分钟 二分查找到底能运用在哪里 xff1f 最常见的就是教科书上的例子 xff0c 在有序数组中搜索给定的某个目标值的索引 再推广一点 xff0c 如果目标值存在重复 xff0c 修改版的二分查找可以返回目标值
  • 2020员工数将超阿里腾讯!字节创始人张一鸣说:当下更需专注,未来值得期待...

    刚刚 xff0c 有一家互联网公司宣布2020年员工人数要超过阿里 腾讯 xff0c 这就是字节跳动 xff01 张一鸣近日发了一封全员信 xff1a 字节跳动8周年 xff1a 往事可以回首 xff0c 当下更需专注 xff0c 未来值得
  • 字节跳动 前端面经(4轮技术面+hr面)

    作者 xff1a 甘先森 https juejin im post 5e6a14b1f265da572978a1d3 笔者读大三 xff0c 前端小白一枚 xff0c 正在准备春招 xff0c 人生第一次面试 xff0c 投了头条前端 xf
  • 就是你把所有代码全写在一个类里的?

    来源 https urlify cn 6jQRN3 最近 xff0c 在对已有项目进行扩展的时候 xff0c 发现要改动的一个类它长900行 xff0c 开放了近40个public接口 xff0c 我流着泪把它给改完了 为了防止这样的惨剧再
  • 如何实现一个高性能可渲染大数据的Tree组件

    作者 xff1a jayzou https segmentfault com a 1190000021228976 背景 项目中需要渲染一个5000 43 节点的树组件 xff0c 但是在引入element Tree组件之后发现性能非常差
  • 白剽,2020年最牛AI技术,各个都有代码

    来源 xff1a Reddit 编辑 xff1a 科雨 2020年 xff0c 想必各国的人民都被新冠病毒支配得瑟瑟发抖 不过 xff0c 这并不影响科研工作者的工作态度和产出质量 疫情之下 xff0c 通过各种方式 xff0c 全球的研究
  • 图解:卷积神经网络数学原理解析

    原标题 Gentle Dive into Math Behind Convolutional Neural Networks 作 者 Piotr Skalski 编 辑 Pita 翻 译 通夜 xff08 中山大学 xff09 had in
  • 【第二弹】这可能是进达摩院最好的机会了!

    很长时间没有更新公众号了 xff0c 最近在准备一些其他节目 xff0c 和小伙伴们说声抱歉了 但是 xff0c 虽然近期没有文章 xff0c 福利是不能少的 早在半年前 xff0c 我发过一篇文章 xff1a 这可能是进达摩院最好的机会了
  • Hadoop入门-WordCount示例

    WordCount的过程如图 xff0c 这里记录下入门的过程 xff0c 虽然有很多地方理解的只是皮毛 Hadoop的安装 安装比较简单 xff0c 安装完成后进行单机环境的配置 hadoop env sh 指定JAVA HOME spa
  • Phaser入门教程

    入门教程 xff0c 我可不会讲什么概念 xff0c 我只会讲一个入门例子 xff0c 通过这个例子 xff0c 你就知道 phaser有多么强大 xff0c 而照着这个例子做 xff0c 你就能知道怎么使用 phaser了 需要说明的是