JAVA全系列 教程
3762个小节阅读:7090.4k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
通过炮弹类的设计,我们可以更深入面向对象编程以及数组的知识。同时,可能还需要读者稍微回忆一下初中数学曾学过的三角函数,这样更能理解炮弹飞行路径的计算原理。 当然,如果忘记这些知识了也没关系,毕竟在实际开发中很少涉及数学原理性的内容。
炮弹类我们用实心的黄色椭圆实现,不再加载新的图片。当然,大家课下可以自行找一些炮弹图片亦可。
我们的逻辑是在窗口固定位置(200,200)
处生成炮弹,炮弹方向是随机的,并且遇到边界会反弹。
【示例13-18】Shell类
xxxxxxxxxx
package com.bjsxt.plane;
import java.awt.Color;
import java.awt.Graphics;
public class Shell extends GameObject {
double degree;
public Shell(){
degree = Math.random()*Math.PI*2;
x = 200;
y = 200;
width = 10;
height = 10;
speed = 3;
}
public void draw(Graphics g){
//将外部传入对象g的状态保存好
Color c = g.getColor();
g.setColor(Color.yellow);
g.fillOval((int)x, (int)y, width, height);
//炮弹沿着任意角度飞行
x += (int)(speed*Math.cos(degree));
y += (int)(speed*Math.sin(degree));
//如下代码,用来实现碰到边界,炮弹反弹回来(原理和打台球游戏一样)
if(y>Constant.GAME_HEIGHT-height||y<30){
degree = -degree;
}
if(x<0||x>Constant.GAME_WIDTH-width){
degree = Math.PI-degree;
}
//返回给外部,变回以前的颜色
g.setColor(c);
}
}
炮弹沿着任意角度飞行,核心代码就两行:
x += speedMath. cos(degree);
y += speedMath. sin(degree);
这里实际用到了初中学的三角函数,通过cos/sin将任意角度分解到X轴、Y轴,从而可以精确的直到x、y坐标的变化情况。初中三角函数忘了的童鞋,自行脑补。