这是我第一次做一个小游戏,做的很差了,但是我以后一定会越做越好的。。。
因为这是从网页上的极品飞车进行的构思,但是和他相差的差距是比较大的,所以我决定给他的命名就叫做了次品飞车了。。。
当然这个是闲话。。。
在做这个游戏的时候,我首先碰到的问题当然是页面切换的问题,虽然在制作的初期就龙哥就已经告诉我们解决的方法了,但是我觉得还是有必要讲一下吧,因为怎么说也是龙哥的汗水吧。。。
其实这种界面的切换是很简单的,只要注意一下界面的关闭和重新打开就行了,重新打开当然就是调用方法然后运用了,这个就是没什么好说的了,然后就是上一个界面的关闭,这个就是要用到一个方法,这个方法是dispose的方法,只要知道了这个方法,其他的就没什么好说的了。
具体代码如下:
SecondCar.this.dispose();
很简单的一句代码,第一句SecondCar是要关闭的界面的类,然后就是调用了dispose的方法。。
当然,并没有这么简单,我们需要注意一些细节的问题,比如说如果我们重新制作的窗体的大小和上一个不一样的话,虽然说并不会怎么样,但是看起来肯定会不爽,而且在游戏里面玩的时候我们需要的坐标也会需要相当的费力。。。
说道了坐标,就必须要说一下相对于屏幕和相对窗体这两个区别了,我们必须要注意,不然的话,我们所取得的坐标值和我们所预期的相差就非常的大了。
再来就进入了我自己写的阶段了,在这个阶段,我首先碰到的问题就是我的图片没有显示出来,这个问题是学长帮我解决的。
具体的问题是这样的:
问题的起因是因为我要使用一个旋转图片的方法,这个方式是Graphics2D中的一个方法,是rotate的方法,这个方法的详细介绍可以在JDK中找到,我就不做过多的解释了。然后是问题了,因为我需要使用这个方法,但是使用了之后我就看到了我的图片已经无法正常的显示了,为了这个问题我纠结了很久,最后,解决的方法是使用bufferImage的方法代替我们普通使用的Image的方法,据说这个是用来专门画图的方法,使用这个方法之后可以很好的运用很多东西。
当然,在这个方法里面我还是学到了一点东西的。
在旋转图片的时候的方法是我们之前就需要把旋转的方法放在我们要把图片放到我们创建的BufferImage中之前,这样的话,就是把我们即将加入的图片进行一种旋转。
具体代码如下:
ImageIcon img = new ImageIcon("car-4.png");
// 创建一个赛车图片的图标
ImageIcon img_car = new ImageIcon("car.png");
// 创建一个空的BufferedImage
BufferedImage buffered = new BufferedImage(img.getIconWidth(),
img.getIconHeight(), BufferedImage.TYPE_INT_BGR);
// 获取他的画布
Graphics2D gr = (Graphics2D) buffered.getGraphics();
// 将背景画到画布上去
gr.drawImage(img.getImage(), 0, 0, 638, 478, null);
// 设置画的时候旋转
gr.rotate(angle, x + 6, y + 5);
// 将赛车绘制到图片上去
gr.drawImage(img_car.getImage(), (int) x, (int) y,null)
// 将这个图片画到面板上去
g.drawImage(buffered, 0, 0, null);
这个应该是做这个游戏的时候遇到的最大的问题,也是最大的收获了吧 。
其他的还有组合键的问题,这个问题确实是很蛋疼的一个问题,我在网上搜索了很久,但是最后找到的方法就是,把每个键位的值用Boolean值来代替,然后在按键的时候改变他的Boolean值,这个方法最后实验的以后是可行的,但是有一点很大的问题,这个算是尚未解决还是需要想办法去解决的吧。。
具体代码如下:
public void keyPressed(KeyEvent e) {
if (x <= 16) {
x = x + 5;
} else if (y >= 360) {
y = y - 5;
} else if (y <= 100) {
y = y + 5;
} else if (x >= 470) {
x = x - 5;
} else {
int i = e.getKeyCode();
switch (i) {
case KeyEvent.VK_LEFT:
isLeft = true;
break;
case KeyEvent.VK_UP:
isUp = true;
break;
case KeyEvent.VK_DOWN:
isDown = true;
break;
case KeyEvent.VK_RIGHT:
isRight = true;
break;
}
}
// 只按了向上的键
if (isUp == true && isDown == false && isLeft == false
&& isRight == false) {
if (speed < 5) {
speed += 0.1;
x += Math.cos(angle) * speed;
y += Math.sin(angle) * speed;
} else {
x += Math.cos(angle) * speed;
y += Math.sin(angle) * speed;
}
}
// 只按了向下的键
else if (isUp == false && isDown == true & isLeft == false
&& isRight == false) {
x -= Math.cos(angle);
y -= Math.sin(angle);
}
// 按了左下的键
else if (isUp == false && isDown == true & isLeft == true
&& isRight == false) {
theta -= 10;
angle = (float) theta / 180 * Math.PI;
if (speed < 5) {
speed += 0.1;
x -= Math.cos(angle) * speed;
y -= Math.sin(angle) * speed;
} else {
x -= Math.cos(angle) * speed;
y -= Math.sin(angle) * speed;
}
}
// 按了右上的键
else if (isUp == true && isDown == false & isLeft == false
&& isRight == true) {
theta += 10;
angle = (float) theta / 180 * Math.PI;
if (speed < 5) {
speed += 0.1;
x += Math.cos(angle) * speed;
y += Math.sin(angle) * speed;
} else {
x += Math.cos(angle) * speed;
y += Math.sin(angle) * speed;
}
}
// 按了左上的键
else if (isUp == true && isDown == false & isLeft == true
&& isRight == false) {
theta -= 10;
angle = (float) theta / 180 * Math.PI;
if (speed < 5) {
speed += 0.1;
x += Math.cos(angle) * speed;
y += Math.sin(angle) * speed;
} else {
x += Math.cos(angle) * speed;
y += Math.sin(angle) * speed;
}
}
// 按了右下的键
else if (isUp == false && isDown == true & isLeft == false
&& isRight == true) {
theta += 10;
angle = (float) theta / 180 * Math.PI;
if (speed < 5) {
speed += 0.1;
x -= Math.cos(angle) * speed;
y -= Math.sin(angle) * speed;
} else {
x -= Math.cos(angle) * speed;
y -= Math.sin(angle) * speed;
}
}
// 只按了向左的键
else if (isUp == false && isDown == false & isLeft == true
&& isRight == false) {
theta -= 10;
angle = (float) theta / 180 * Math.PI;
}
// 只按了向右的键
else if (isUp == false && isDown == false & isLeft == false
&& isRight == true) {
theta += 10;
angle = (float) theta / 180 * Math.PI;
}
}
public void keyReleased(KeyEvent e) {
int i = e.getKeyCode();
switch (i) {
case KeyEvent.VK_LEFT:
isLeft = false;
break;
case KeyEvent.VK_UP:
isUp = false;
break;
case KeyEvent.VK_DOWN:
isDown = false;
break;
case KeyEvent.VK_RIGHT:
isRight = false;
break;
}
}
};
总体来分析的话,我认为这个问题的本质就是我们输入的时候,程序一次只能够识别一个键位,多了的话,他无法同时识别,这个方法,稍微使用了一点点技巧,但是仍旧不能完全的解决,在我的思路之中,曾经是想要用一个线程去解决这个问题,简单的思路和这个方法很类似,也是给这些键位设上Boolean值,然后让线程一直运转,按键的时候改变为true,松开的时候又变回false,但是最终证明这个方法是错误的,因为他还是只能认识一个键位,我们无法让两个键位的Boolean值同时改变,这样的话就回到了最初的问题,并没有解决掉这个问题,然后我在百度上也只能找到上述的方法,并没有其他什么更好的方法,估计是大神们都隐匿了,只剩下水民了,现在这里也坐等高手来真正的解决下这个问题,感激不敬,剩下的就是和弹球时候的问题差不多了,都是一些碰撞的问题,没有必要一一叙述了。
这个差不多就是我第一个游戏所能得到的一点总结吧,感觉同伴们做的都比我好的很多,还是要好好的努力一下了。
分享到:
相关推荐
微信小程序 小游戏类 数独小游戏 (源代码+截图)微信小程序 小游戏类 数独小游戏 (源代码+截图)微信小程序 小游戏类 数独小游戏 (源代码+截图)微信小程序 小游戏类 数独小游戏 (源代码+截图)微信小程序 小...
小游戏包含以下: 射击达人小游戏 动物对决小游戏 迷宫小游戏 打地鼠小游戏 2048小游戏 贪吃蛇小游戏 扫雷小游戏 滑雪小游戏 飞翔的小鸟小游戏 谷歌小游戏 塔防小游戏 坦克大战小游戏 吃金币小游戏 飞机大战小游戏 ...
小程序源码 小游戏类(带后台)小程序源码 小游戏类(带后台)小程序源码 小游戏类(带后台)小程序源码 小游戏类(带后台)小程序源码 小游戏类(带后台)小程序源码 小游戏类(带后台)小程序源码 小游戏类(带...
【标题】:“C++各种小游戏(我们老师的)” 在C++编程领域,开发小游戏是一种非常有效的学习实践方式,尤其对于初学者来说。本资源集合包含了我们老师精心制作的一系列C++小游戏,旨在帮助学生深入理解和掌握C++...
java单机小游戏java单机小游戏java单机小游戏java单机小游戏 java单机小游戏java单机小游戏java单机小游戏java单机小游戏 java单机小游戏java单机小游戏java单机小游戏java单机小游戏 java单机小游戏java单机小游戏...
小游戏.zip是一款集合了多种经典小游戏的压缩包,包含了各种类型的游戏,如益智、休闲、动作、冒险等。这些游戏都是精选的,具有丰富的玩法和趣味性,可以满足不同年龄段和兴趣爱好的玩家需求。在这个压缩包中,你...
微信小游戏源码 奇葩连连看游戏源码(仅用于学习参考)微信小游戏源码 奇葩连连看游戏源码(仅用于学习参考)微信小游戏源码 奇葩连连看游戏源码(仅用于学习参考)微信小游戏源码 奇葩连连看游戏源码(仅用于学习...
70多个安卓初级难度小游戏案例小源码完美运行经典小游戏安卓小游戏70多个安卓初级难度小游戏案例小源码完美运行经典小游戏安卓小游戏70多个安卓初级难度小游戏案例小源码完美运行经典小游戏安卓小游戏70多个安卓初级...
c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏c++小游戏...
微信小游戏源码 猫咪游戏源码(仅用于学习参考)微信小游戏源码 猫咪游戏源码(仅用于学习参考)微信小游戏源码 猫咪游戏源码(仅用于学习参考)微信小游戏源码 猫咪游戏源码(仅用于学习参考)微信小游戏源码 猫咪...
java小游戏 棋类游戏java小游戏 棋类游戏java小游戏 棋类游戏java小游戏 棋类游戏java小游戏 棋类游戏java小游戏 棋类游戏java小游戏 棋类游戏java小游戏 棋类游戏java小游戏 棋类游戏java小游戏 棋类游戏java小游戏...
java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源...
2. **微信小游戏开发框架**: 微信小游戏有自己的开发框架,开发者需要熟悉其API和规范,以便将Unity的逻辑适配到微信小游戏的环境中。这包括事件处理、动画控制、网络通信等。 3. **微信小游戏SDK集成**: Unity项目...
cocos creator 全名2K 2048小游戏源码下载 可做区块链游戏 cocos creator 全名2K 2048小游戏源码下载 可做区块链游戏 cocos creator 全名2K 2048小游戏源码下载 可做区块链游戏 cocos creator 全名2K 2048小游戏源码...
java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发...
java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 ...
Java小游戏Java小游戏Java小游戏Java小游戏 Java小游戏Java小游戏Java小游戏Java小游戏 Java小游戏Java小游戏Java小游戏Java小游戏 Java小游戏Java小游戏Java小游戏Java小游戏 Java小游戏Java小游戏Java小游戏Java小...
设计小游戏盒子 如将(猜拳游戏,骰子猜点数大小)运用于同一个游戏盒子中,用户可以键入关键字来实现选择游戏,进行游戏,切换游戏,退出程序等功能,同时该游戏盒子呈开放状态,随时都可以添加新游戏,并互相不...