前言

最近公司做项目的时候正好使用到phaser,在这里做一下自己整理出来的一些心得,方便大家参考,phaser这一个游戏引擎通常是做2d游戏的,入门也非常简单,只需你会一点的javascript,但是你想做一个比较完美的游戏的话,那么光靠一点点的javascript是远远不够的,本篇博客将快速带你入门phaser。

phaser简介

phaser是一款快速,免费及开源HTML5游戏框架,它支持WebGL和Canvas两种渲染模式,可以在任何web浏览器环境下运行,游戏可以通过第三方工具转为iOS、Android 支持的 Native APP,允许使用 JavaScript 和 TypeScript 进行开发。

phaser核心

语法:new Game(width, height, renderer, parent, state, transparent, antialias, physicsConfig)

phaser中的一切都是从Game类开始,所以我们暂时将Game类当作phaser的中心吧!当你new了一个Game之后,game中的很多属性就有了,phaser的核心可以用如下这张图表示。

这里我们经常使用的对象有load,time,world,input,camera。

入门教程

创建phaser对象

(1):创建phaser对象方式一

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>快速入门phaser</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
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>
</html>

(2):创建phaser对象方式二

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>快速入门phaser<</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var game=new Phaser.Game(800,600,Phaser.AUTO);
var main=function(game){
this.init=function(){
//游戏场景初始化
}
this.preload=function(){
//游戏资源预加载
}
this.create=function(){
//游戏场景创建
}
this.update=function(){
//游戏逻辑实现
}
this.render=function(){
//游戏自定义渲染
}
}
</script>
</body>
</html>

(3):创建phaser对象方式三

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>快速入门phaser</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var game=new Phaser.Game(800,600,Phaser.AUTO);
game.state.add('state',state);
game.state.start('state');
function state(){
this.init=function(){}
this.preload=function(){}
this.create=function(){}
this.update=function(){}
this.render=function(){}
}
</script>
</body>
</html>

(4):创建phaser对象方式四

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>快速入门phaser</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var game=new Phaser.Game(800,600,Phaser.AUTO,state);
function state(){
this.init=function(){ }
this.preload=function(){ }
this.create=function(){ }
this.update=function(){ }
this.render=function(){ }
}
</script>
</body>
</html>

(5):创建phaser对象方式五

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>快速入门phasr</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config={
width:800,
height:600,
renderer:Phaser.AUTO,
antialias:true,
multiTexture:true,
state:{
preload:preload,
create:create,
update:update
}
}
var game=new Phaser.Game(config);
function preload(){ }
function create(){ }
function update(){ }
</script>
</body>
</html>

在开发中,我们经常使用方式五创建phaser对象,当然你也可以根据自己的喜好选择,就看你是喜欢函数创建还是对象创建。

参数详解

Name Type Default
width:游戏宽度 number|string 800
height:游戏高度 number|string 600
renderer:游戏渲染方式 number Phaser.AUTO
parent:游戏容器 string|HTMLElement ''
state:游戏默认场景 object null
transparent:画布元素是否透明 boolean false
antialias:是否开启抗锯齿 boolean true
physicsConfig:物理引擎配置 object null

(1):width

画布宽度,数字或字符串类型可选参数,默认为800,如果以字符串的形式给出,该值必须在0到100之间,为百分比,如果没有指定父容器,则默认为浏览器窗口

(2):height

画布高度

(3):renderer

指定渲染机制,值可以是Phaser.WebGL,Phaser.Canvas,Phaser.AUTO(自动尝试使用WebGL,如果浏览器或设备不支持,使用canvas)或者Phaser.HEADLESS(不进行渲染)

(4):parent

想插入游戏画布的DOM元素,画布的父元素,可选值为DOM本身或者是id,如果为空字符串,画布将被插入到body元素中

(5):state

默认的状态对象,对象类型,可以是null,也可以是Phaser.state函数(初始化,预加载,创建,更新,渲染)

(6):transparent

画布背景是否透明,布尔值,默认为false

(7):antialias

是否绘制为平滑纹理,布尔值,默认为true

(8):physicsConfig

一个物理配置对象,在Physics world创建时传递,对象默认为null

注:renderer可选Phaser.AUTO,Phaser.Canvas,Phaser.WebGL

参考文档:https://photonstorm.github.io/phaser-ce/Phaser.Game.html

中文网:http://www.phaserengine.com/

phaser小站:https://www.phaser-china.com/example-detail-422.html

社区:http://club.phaser-china.com/

实例解析

接下来我们通过phaser实现一个小游戏以及快速入门,见识下phaser开发游戏的功能有多么的强大,需要说明的是,这个就是phaser官方入门的案例,废话不多说,直接上源码。

(1):创建游戏和添加场景

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>phaser入门小游戏</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config={
width:800,
height:600,
renderer:Phaser.AUTO,
antialias:true,
multiTexture:true,
state:{
preload:preload,
create:create,
update:update,
}
}
var game=new Phaser.Game(config);
function preload(){
//加载资源
}
function create(){
//对象的创建及初始化
}
function update(){
//游戏主循环
}
</script>
</body>
</html>

在这里,我们已经创建了游戏场景和加载了游戏场景,但是我们看到一片黑的,接下来我们加点东西。

(2):资源加载

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>phaser入门小游戏</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config={
width:800,
height:600,
renderer:Phaser.AUTO,
antialias:true,
multiTexture:true,
state:{
preload:preload,
create:create,
update:update,
}
}
var game=new Phaser.Game(config);
function preload(){
//加载资源
game.load.image('sky','../../assets/sky.png');
game.load.image('ground','../../assets/star.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(){
//游戏主循环
}
</script>
</body>
</html>

我们看到屏幕的左上角出现了一颗星星,但是还是缺点什么,这种效果依然不是我们想要的效果,接下来我们让它更具体化。

(3):加载场地

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>phaser入门小游戏</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config={
width:800,
height:600,
renderer:Phaser.AUTO,
antialias:true,
multiTexture:true,
state:{
preload:preload,
create:create,
update:update,
}
}
var game=new Phaser.Game(config);
var platforms;//场地
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.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(){
//游戏主循环
}
</script>
</body>
</html>

在这里我们已经将场景加入进来了以及开启了物理引擎,当然这只是为后面做准备,然后我们创建了天空,大地和两个平板。大地和平板的位置定位,我们是通过坐标来进行的,

其中,大地和两个平板都被加到了platforms这个组中,这个组我们为它启动了物理属性,然后我们设置了大地和两个平板是不能动的,这样他们就不会由于撞击被改变位置。接下来,我们来加入一个小人,这个小人也是我们游戏的主角。

(4):加载主角

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>phaser入门小游戏</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config={
width:800,
height:600,
renderer:Phaser.AUTO,
antialias:true,
multiTexture:true,
state:{
preload:preload,
create:create,
update:update,
}
}
var game=new Phaser.Game(config);
var platforms;//场地
var player;//游戏主角
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.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(){
//游戏主循环
}
</script>
</body>
</html>

dude.png图片

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

(5):使主角站立平台上

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>phaser入门小游戏</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config={
width:800,
height:600,
renderer:Phaser.AUTO,
antialias:true,
multiTexture:true,
state:{
preload:preload,
create:create,
update:update,
}
}
var game=new Phaser.Game(config);
var platforms;//场地
var player;//游戏主角
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.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>
</html>

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

(6):主角运动

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>phaser入门小游戏</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config={
width:800,
height:600,
renderer:Phaser.AUTO,
antialias:true,
multiTexture:true,
state:{
preload:preload,
create:create,
update:update,
}
}
var game=new Phaser.Game(config);
var platforms;//场地
var player;//游戏主角
var cursors;//控制键
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.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>
</html>

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

(7):加载大量星星

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>phaser入门小游戏</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config={
width:800,
height:600,
renderer:Phaser.AUTO,
antialias:true,
multiTexture:true,
state:{
preload:preload,
create:create,
update:update,
}
}
var game=new Phaser.Game(config);
var platforms;//场地
var player;//游戏主角
var cursors;//控制键
var stars;//星星
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.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<20;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,stars){
stars.kill();//销毁星星
}
</script>
</body>
</html>

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

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

(8):显示分数

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>phaser入门小游戏</title>
</head>
<body>
<script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var config={
width:800,
height:600,
renderer:Phaser.AUTO,
antialias:true,
multiTexture:true,
state:{
preload:preload,
create:create,
update:update,
}
}
var game=new Phaser.Game(config);
var platforms;//场地
var player;//游戏主角
var cursors;//控制键
var stars;//星星
var score=0;//初始分数为0
var scoreText;//展示分数的文本
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.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<20;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,'分数: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,stars){
stars.kill();//销毁星星
score+=10;
scoreText.text='分数:'+score;
}
</script>
</body>
</html>

我们通过game.add.text为场景加上一个文本,显示在左上角,在collectStar的时候,将分数进行累加,然后更新显示,这样就结束啦。到这里,一个简单的小游戏就实现了,是不是比想象中的简单呢?

资源下载:https://coding.net/u/kk_1/p/phaser_group/git

phaser学习总结之phaser入门教程的更多相关文章

  1. 我的学习经历——Linux系统入门教程

    我想把最近学习Linux的经验和过程分析出来,当时是在上大三,是学生一枚,以前对开源也没有什么特殊的认识,只觉得很高深,不明觉厉的东西,在当时因为学校要参加职业技能大赛,其中有一团体性质的比赛,几个同 ...

  2. C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)

    一项目创建: 创建项目是开发的第一步. 运行untiy之后如果是第一次运行会弹出 我们这里随便创建一个项目. 二Untiy面板介绍: 三代码编辑器的切换: 这里我安装了vs2012. 到这里开发环境基 ...

  3. 微服务学习及.net core入门教程

    https://www.cnblogs.com/jackyfei/p/12067708.html https://www.cnblogs.com/jesse2013/ http://video.jes ...

  4. phaser学习总结之Text对象详解

    前言 在phaser学习总结之phaser入门教程中,我们已经入门了phaser,对phaser也有所了解但是我们并没有对phaser中的每个对象的属性和方法进行详解,本章将对phaser中的Text ...

  5. phaser学习总结之Tween详解

    前言 在上一章phaser学习总结之phaser入门教程中,我们已经初步入门了phaser,并通过一个案例了解了phaser,现在我们需要对phaser中的对象进行讲解,本章需要讲解的是tween,即 ...

  6. 【特别推荐】Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  7. C#入门教程(一)–.Net平台技术介绍、C#语言及开发工具介绍-打造C#学习教程

    一.什么是.Net平台? .Net平台是微软搭建的技术平台,技术人员在此平台上进行应用的搭建与开发.它提供了运行所必须的环境.NET Framework类库以及CLR(公共语言运行时).好比我们人类的 ...

  8. WCF入门教程一[什么是WCF]--转载只为学习收藏

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  9. C#入门教程(二)–C#常用快捷键、变量、类型转换-打造C#学习教程

    C#入门教程(一)–.Net平台技术介绍.C#语言及开发工具介绍-打造C#学习教程 上次教程主要介绍了.Net平台以及C#语言的相关介绍.以及经典程序案例,helloworld程序. 初来乍到,第一次 ...

随机推荐

  1. 使用PHP结合Ffmpeg快速搭建流媒体服务实践

    一.背景 笔者想将自己收藏的一些电影放到网站上可以用来随时播放,不过遇到了一个问题,便是如果直接将MP4文件放放到网站目录当中,手机端必须下载整个视频才可以播放,而如果跨外网传输,这实在是不太现实. ...

  2. vue地址栏发生变化但是页面不会更新怎么办

    话不多说直接上问题,主要是在使用router-link进行页面跳转时,使用query进行地址栏传输数据,发现当点击跳转一次之后再次点击虽然地址栏上问号后面的数据会改变,但是页面并不会更新,导致页面永远 ...

  3. python修改内存,(修改植物大战僵尸)

    import win32process # 进程模块 import win32con # 系统定义 import win32api # 调用系统模块 import ctypes # c语言类型 imp ...

  4. CodeForces 1107 - G Vasya and Maximum Profit 线段树

    题目传送门 题解: 枚举 r 的位置. 线段树每个叶子节点存的是对应的位置到当前位置的价值. 每次往右边移动一个r的话,那么改变的信息有2个信息: 1. sum(a-ci) 2.gap(l, r) 对 ...

  5. 牛客小白月赛 G 异或 找规律

    链接:https://www.nowcoder.com/acm/contest/135/G来源:牛客网 题目描述 从前,Apojacsleam家的水族箱里,养了一群热带鱼. 在这几条热带鱼里,Apoj ...

  6. bzoj 2726 任务安排 斜率优化DP

    这个题目中 斜率优化DP相当于存在一个 y = kx + z 然后给定 n 个对点 (x,y)  然后给你一个k, 要求你维护出这个z最小是多少. 那么对于给定的点来说 我们可以维护出一个下凸壳,因为 ...

  7. codeforces 701 E. Connecting Universities(树+ 边的贡献)

    题目链接:http://codeforces.com/contest/701/problem/E 题意:有n个城市构成一棵树,一个城市最多有一个学校,这n个城市一共2*k个学校,要对这2*k个学校进行 ...

  8. ASP.NET Core结合Nacos来完成配置管理和服务发现

    目录 前言 Nacos的简介 启动Nacos 配置管理 服务发现 写在最后 前言 今年4月份的时候,和平台组的同事一起调研了一下Nacos,也就在那个时候写了.net core版本的非官方版的SDK. ...

  9. Spring中常用的23中设计模式

    1.spring 中常用的设计模式有23中  分类  设计模式  创建型 工厂方法模式(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder).原型 ...

  10. 从“HDU 2005 第几天?”谈起

    在程序设计中,日期时间的处理经常会遇到.在C语言程序设计的一些教材中会出现如下例子或习题. [例1]第几天? (HDU 2005) 给定一个日期,输出这个日期是该年的第几天. Input输入数据有多组 ...