最佳日常交易
最佳日常交易

关于Androidbob体育提现bob哪个彩靠谱权威的链接可能会使我们赢得佣金。学到更多。

让我们在Android Studio中建造一个简单的炸弹克隆bob体育提现

通过在Android Studio中建立一个工作齐全的Flappy Bird克隆来给您的朋友留下深刻的印象!bob体育提现本文向您展示了如何和建立有关如何为Android创建2D游戏的第一部分。bob体育提现
经过
2018年1月18日
bob体育提现Android游戏创建

以前的教程,我带您完成了制作您的第一个“ 2D游戏”的过程。我们构建了一个简单的脚本,可以让角色精灵在屏幕周围弹跳。从那里开始,我暗示将其变成完整的游戏并不是太多的工作。

我说实话!你可以退房本文将传感器支持添加到您的代码中并通过倾斜手机来控制您的角色,并可能在屏幕上追随收藏品。或者,您可以在底部贴上一名接力棒,一些砖头顶上进行突破游戏。

如果开发完整游戏的想法似乎仍然有些艰巨,请考虑您的第二部分。我将向您展示如何将这个简单的游戏循环变成一个游戏脆弱的鸟。当然,我迟到了三年,但这几乎是我的M.O。

该项目比我们最近所解决的要高得多,因此要努力。我推荐我们的Java初学者教程, 有可能这个简单的数学游戏开始。如果您要面对挑战,让我们深入研究。最终的奖励有望能够发挥许多进一步发展的潜力。到达那里将提供一些很棒的学习机会。

笔记:可以找到该项目的完整代码这里。如果您想从我们上次创建的现成的2D引擎开始,那么您可以获取该代码这里

回顾

对于这篇文章,应考虑前面提到的文章和视频阅读/查看。要简要回顾一下,我们为自己建造了一个帆布,可以在上面绘制精灵和形状,然后制作了一个单独的线程来绘制到它的情况下,而无需阻止主线程。这是我们的“游戏循环”。

我们有一个名为字符prite它绘制了一个2D字符,并在屏幕周围有一些弹性运动,我们有游戏视图它创建了画布,我们有主要线程对于线程。

回去阅读该帖子,以开发游戏的基本引擎。如果您不想这样做(好吧,您不相反吗?),您可以阅读此信息以了解更多技能。您也可以提出自己的游戏循环和精灵解决方案。例如,您可以通过自定义视图获得类似的东西。

使它蓬勃发展

在里面更新()我们的方法字符prite上课,有一种算法可以在屏幕周围反弹角色。我们将用更简单的东西代替它:

代码
y += y velocity;

如果您还记得,我们已经定义了y velocityAS 5,但我们可以更改它以使角色跌落更快或更慢。变量y用于定义玩家角色的位置,这意味着它现在将缓慢下降。我们不希望角色再正确地移动,因为我们将滚动自己周围的世界。

这就是方法脆弱的鸟应该工作。通过敲击屏幕,我们可以使我们的角色“拍打”,从而恢复一定的高度。

碰巧的是,我们已经有一个覆盖Ontouchevent在我们的游戏视图班级。记住这一点游戏视图是为我们的活动所示的帆布代替通常的XML布局文件。它占用整个屏幕。

弹出回到你的字符prite上课,让你y velocity和你的Xy协调为公共变量:

代码
public int x,y;私有int xvelocity = 10;公共int yvelocity = 5;

这意味着现在可以从外部类访问这些变量。换句话说,您可以从中访问和更改它们游戏视图

现在在Ontouchevent方法,只需这么说:

代码
targureprite.y = targureprite.y-(targureprite.yvelocity * 10);

现在,无论我们在哪里敲击画布,角色的上升速度都将是每个更新下降的速度的十倍。重要的是,我们保持这种脆弱的状态等于秋季的速度,因此我们可以选择以后改变重力力量并保持游戏平衡。

我还添加了一些小调,使游戏更多脆弱的鸟-喜欢。我用这条线交换了蓝色背景的颜色:

代码
canvas.drawRGB(0,100,205);

我还在插画家中绘制了一个新的鸟类角色。问好。

他是一个可怕的怪兽。

我们还需要使他大得多。我借了一种从用户jeet.chanchawat上缩小位图的方法堆栈溢出

代码
public bitmap getresizedbitmap(位图BM,int newwidth,int newheight){int width = bm.getWidth();int高度= bm.getheight();float scalewidth =(((float)newwidth) / width;float scaleheight =(((float)newheight) /高度;//为操作矩阵矩阵创建一个矩阵= new matrix();//调整位映射矩阵大小。//“重现”新的位图位图resizeizebitMap = bitmap.createbitmap(bm,0,0,0,宽度,高度,矩阵,false);bm.recycle();return justizedBitMap;}

然后,您可以使用此行将较小的位图加载到您的字符prite目的:

代码
tarneprite = new targureprite(getResizedBitMap(bitmapfactory.decoderesource(getResources(),r.drawable.bird),300,240));

最后,您可能需要将应用程序的方向更改为景观,这对于这些类型的游戏来说是正常的。只需将此行添加到您的清单中的活动标签中:

代码
bob体育提现Android:筛选=“景观”

虽然这仍然是基本的,但我们现在开始得到一些看起来有点像脆弱的鸟

这是很多时间的编码:反向工程,在线对话中借用方法,提出问题。如果您不熟悉所有Java声明,或者您自己不弄清楚某些内容,请不要担心。通常最好不要重新发明轮子。

障碍!

现在,我们有一只鸟落在屏幕的底部,除非我们点击飞行。有了基本的机械师,我们要做的就是引入障碍!为此,我们需要绘制一些管道。

由于这是同时面对的管道,因此可以使用我们之前借的方法对其进行翻转(我们只是将高度设置为减数)。为了使事情变得简单,我们不妨使用两个单独的图像。

现在我们需要创建一个新课程,此类将像字符prite班级。这个将被称为“管道”。它将在屏幕上渲染两个管道 - 顶部一根管道,底部有一根管道。

脆弱的鸟,管道出现在不同的高度上,挑战是在尽可能长时间的时间范围内通过间隙。

好消息是,类可以创建同一对象的多个实例。换句话说,我们可以根据自己的意愿生成尽可能多的管道,所有这些管道都设置为不同的高度和位置,并且都使用一块代码。唯一具有挑战性的部分是处理数学,因此我们确切地知道我们的差距有多大!为什么这是一个挑战?因为无论屏幕的大小如何,都需要正确排列。考虑所有这些问题可能会有些头痛,但是如果您喜欢一个具有挑战性的难题,那么编程实际上可以变得很有趣。当然,这是一个很好的心理锻炼!

如果您喜欢一个具有挑战性的难题,那么编程实际上可以变得很有趣。当然,这是一个很好的心理锻炼!

我们使蓬松的鸟角色本身高240像素。考虑到这一点,我认为500个像素应该是一个足够大的差距 - 我们稍后可以更改。

如果我们现在制作管道和颠倒的管道的一半,则可以在它们之间放置500像素的间隙(管道A将位于屏幕的底部 + 250p,而管道B则将是在屏幕顶部 - 250p)。

这也意味着我们有500个像素可以在我们的精灵上播放。我们可以将两根管道向下移动250或向上移动250,并且玩家将无法看到边缘。也许您可能想给您的管道更多的动作,但我很高兴能保持美好和轻松。

bob体育提现Android应用程序开发

现在,我们自己完成所有这些数学,而“知道”我们的差距是500p,这很容易,但这是不好的编程。这意味着我们将使用“魔术数”。魔术数字是整个代码中使用的任意数字,您希望只记住。当您在一年的时间内回到此代码时,您会真的还记得为什么到处写作-250吗?

取而代之的是,我们将制作一个静态整数 - 我们将无法更改的值。我们称之为高水平并使其等于500。从现在开始,我们可以参考高水平或者Gapheight/2而且我们的代码将更加可读。如果我们真的很好,我们也会在角色的身高和宽度上做同样的事情。

将其放在游戏视图方法:

代码
公共静态int gapheigh = 500;

当您在那里时,您还可以定义游戏的玩法速度:

代码
公共静态int速度= 10;

您还可以选择高水平变成常规的公共整数,随着游戏的进行,它会变小,挑战加剧 - 您的电话!速度也是如此。

考虑到所有这些,我们现在可以创建我们的管道班级:

代码
公共类Pipesprite {private Bitmap Image;私有位图image2;public int xx,yy;私有int xvelocity = 10;private int screitHeight = resources.getSystem()。getDisPlayMetrics()。高度像素;Public Pipesprite(位图BMP,位图BMP2,INT X,Int Y){Image = BMP;Image2 = BMP2;yy = y;xx = x;} public void draw(canvas canvas){canvas.drawbitmap(image,xx, - (gameview.gapheight / 2) + yy,null); canvas.drawBitmap(image2,xX, ((screenHeight / 2) + (GameView.gapHeight / 2)) + yY, null); } public void update() { xX -= GameView.velocity; } }

管道也将以我们决定为游戏的速度以每个更新的速度向左移动。

回到游戏视图方法,我们可以在创建玩家精灵之后立即创建对象。这发生在表面处理()方法,但我已经将以下代码组织到了另一种称为的方法中makelevel(),只是为了使一切都保持整洁:

代码
位图BMP;位图BMP2;int y;int x;bmp = getResizedBitMap(bitmapfactory.decoderesource(getResources(),r.drawable.pipe_down),500,resources.getSystem()。getDisPlayMetrics()。bmp2 = getResizedBitMap(bitmapfactory.decoderesource(getResources(),r.drawable.pipe_up),500,resources.getSystem()。getDisplayMetrics()。Pipe1 =新管道(BMP,BMP2,0,2000);Pipe2 =新管道(BMP,BMP2,-250,3200);Pipe3 =新管道(BMP,BMP2,250,4500);

这连续创建三个管道,设置为不同的高度。

每次游戏启动时,前三个管道都会具有完全相同的位置,但是我们稍后可以随机对其进行随机进行。

如果我们添加以下代码,那么我们可以确保管道像我们的角色一样重新绘制并重新绘制:

代码
public void update(){ta​​rgureprite.update();pipe1.update();pipe2.update();pipe3.update();} @Override public void draw(canvas canvas){super.draw(canvas);if(canvas!= null){canvas.drawRGB(0,100,205);tamemprite.draw(canvas);pipe1.draw(画布);pipe2.draw(画布);pipe3.draw(画布); } }

你有它。还有一些路要走,但是您只是创建了第一个滚动精灵。做得好!

这只是合乎逻辑的

bob体育提现Android开发

现在,您应该能够运行游戏并控制脆弱的鸟,因为他却跑过一些管道。目前,他们没有构成任何真正的威胁,因为我们没有碰撞检测。

这就是为什么我想在游戏视图处理逻辑和“物理”(例如它们)。基本上,我们需要检测角色何时接触一根管道,并且我们需要在管道消失在屏幕左侧时继续向前移动。我已经解释了评论中一切的作用:

代码
public void logic(){//检测字符是否在触摸一根管道,如果(tarneprite.y  pipe1.xx && && && &&&华targureprite.x  pipe2.xx && targinprite.x  pipe3.xx && targinprite.x (screetHeight / 2) +(gapheight / 2) + pipe1.yy && targinprite.x + 300> pipe1.xx && targinprite.x (ScreenHeight / 2) +(gapheight / 2) + pipe2.yy && targionprite.x + 300> pipe2.xx && targinprite.x (screetHeight / 2) +(gapheight / 2) + pipe3.yy && targinprite.x + 300> pipe3.xx && targinprite.x  screetHeight){repeTlevel();} //如果管道从屏幕的左侧伸出,//如果(pipe1.xx + 500 <0){random r = new random(); int value1 = r.nextInt(500); int value2 = r.nextInt(500); pipe1.xX = screenWidth + value1 + 1000; pipe1.yY = value2 - 250; } if (pipe2.xX + 500 < 0) { Random r = new Random(); int value1 = r.nextInt(500); int value2 = r.nextInt(500); pipe2.xX = screenWidth + value1 + 1000; pipe2.yY = value2 - 250; } if (pipe3.xX + 500 < 0) { Random r = new Random(); int value1 = r.nextInt(500); int value2 = r.nextInt(500); pipe3.xX = screenWidth + value1 + 1000; pipe3.yY = value2 - 250; } } public void resetLevel() { characterSprite.y = 100; pipe1.xX = 2000; pipe1.yY = 0; pipe2.xX = 4500; pipe2.yY = 200; pipe3.xX = 3200; pipe3.yY = 250; }

这不是世界上最繁琐的方式。它占用了很多线条,而且很复杂。相反,我们可以将管道添加到列表中,并执行此操作:

代码
public void logic(){list Pipes = new ArrayList <>();PIPES.ADD(PIPE1);PIPES.ADD(PIPE2);PIPES.ADD(PIPE3);for(int i = 0; i  pipes.get(i).xx && targinprite.x (screatheight / 2) +(gapheight / 2) + pipes.get(i).yy && targinprite.x + 300> pipes.get(i).xx && targinal.x prite.x  screenHeight) { resetLevel(); } }

这不仅是更干净的代码,而且还意味着您可以添加尽可能多的对象,并且物理引擎仍然可以正常工作。如果您要制作某种平台游戏,这将非常方便,在这种情况下,您将公开此列表,并在每次创建它们时都会添加新对象。

现在运行游戏,您应该发现它的玩法就像脆弱的鸟。您将可以通过敲击并避免在屏幕上移动角色在屏幕上移动。无法及时移动,您的角色将在序列开始时重生!

往前走

创建应用程序被动收入

这是一个功能齐全的脆弱的鸟希望您不会花太久的时间来组合的游戏。它只是表明Android Studio是一个非常灵活bob体育提现的工具(也就是说,本教程显示了像Unity这样的引擎可以容易得多的游戏开发)。对于我们来说,将其发展成基本的平台游戏或突破性游戏并不是什么大不了的。

如果您想进一步进行这个项目,还有很多事情要做!该代码需要进一步整理。您可以在repetlevel()方法。您可以将静态变量用于字符的高度和宽度。您可能会将速度和重力从精灵中排出,然后将其放在逻辑方法中。

显然,还有很多事情要做,使这款游戏实际上也很有趣。给鸟有一些动力会使游戏玩法越来越僵化。创建一个以最高分的屏幕UI处理屏幕UI也将有所帮助。必须提高挑战的平衡是必须的 - 也许随着游戏的进行会有所帮助,加大困难。角色精灵的“命中框”太大了,图像尾声掉落。如果这取决于我,我可能还想在游戏中添加一些收藏品,以创建一个有趣的“风险/奖励”机械师。

这个关于如何设计出色的手机游戏的文章可能服务。祝你好运!