java中bullet的简单介绍
今天给各位分享java中bullet的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java中Vector中的对象,中调用后,如何再获得其线程对象
- 2、java基础知识,我是菜鸟
- 3、关于java中模拟抛物线轨迹的问题
- 4、JAVA建了一个enum,怎么初始化
- 5、Java怎么让小飞机连续射子弹
- 6、JAVA多线程里的循环耗时
java中Vector中的对象,中调用后,如何再获得其线程对象
Vector 可以用Iterator迭代的。也可以用for循环进行遍历。比如:
for (Iterator iterator = vec.iterator(); iterator.hasNext();) {
Bullet bullet = (Bullet) iterator.next();
}
for (int i = 0; i vec.size(); i++) {
Bullet b = (Bullet) vec.get(i); // 得到的object对象强转为Bullet对象
}
你在for循环里添加判断就好了。也就是你所谓的 获得各个Bullet对象线程运行的情况 。 不过注意迭代的时候是不能对容器进行更改的。所谓更改比如删除或者增加一个Bullet对象到容器中。
另外,我也写过java游戏。曾经也写过一个关于Bullet类的。 我觉得没有必要把每个子弹定义成一个线程。 子弹的运动完全可以在draw方法里写。如果子弹多了。你的游戏效率是很低的。 这是我的建议
java基础知识,我是菜鸟
import引入程序所需要的包。
java.awt.event.*用来处理有AWT组建产生的各种事件,为处理这些事件提供接口和类;
java.io.*为数据流、串行化和文件系统提供输入输出
java.net.*执行网络应用提供类
java.util.*其中包含处理框架结构、事件模型和数据时间等的类
关于java中模拟抛物线轨迹的问题
看了这套题目感觉很有兴趣,就花了一个中午亲手给你写了一个类似的例子,相信可以帮助你对这个游戏有很好的理解,从右向左那个是僵尸,点一下鼠标就出现植物,我只是起到一个抛砖引玉的作用。代码如下(绝对可以用的代码):
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.event.MouseInputAdapter;
public class PlantsAndZombies extends JFrame {
private static final long serialVersionUID = 1L;
public static final int screenWidth=800;
public static final int screenHeight=600;
Printer printer;
Zombies zombies=new Zombies();
Thread T_Zombies;
Bullet bullet=new Bullet();
Thread T_Bullet;
public PlantsAndZombies(){
this.setSize(new Dimension(screenWidth,screenHeight));
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.addMouseListener(new Shoot(this));
this.setVisible(true);
printer=new Printer( this.getGraphics());
printer.Add(zombies);
printer.Add(bullet);
T_Zombies=new Thread(zombies);
T_Zombies.start();
T_Bullet=new Thread(bullet);
T_Bullet.start();
}
public void Shoot(){
bullet.getTarget(zombies);
}
public static void main(String[] args){
PlantsAndZombies game=new PlantsAndZombies();
}
public void run() {
while(true){
}
}
}
interface Drawable{
void drawMe(Graphics g);
}
class Zombies implements Drawable,Runnable{
public boolean isLive=true;
public int x=PlantsAndZombies.screenWidth;
public int y=500;
public void run() {
while(true){
if(x10){
x-=20;
}else x=PlantsAndZombies.screenWidth;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void drawMe(Graphics g){
g.drawRect(x,y,20,50);
}
}
class Bullet implements Drawable,Runnable{
private int x=0;
private int y=500;
private Zombies _z;
private float a,b,c;
private float step;
public void getTarget(Zombies z){
_z=z;
// 用三点确定一个抛物线的方法,计算弹道
int x1=0;
int y1=500;
int x2=(z.x-6*20)/2;
int y2=300; // 抛物线高度200个像素
int x3=z.x-6*20; // 假设击中僵尸用3秒钟,在这3秒钟内僵尸向前移动了6*20个像素
int y3=500;
a=(float)((y2-y1)*(x3-x2)-(y3-y2)*(x2-x1))/(float)((x2*x2-x1*x1)*(x3-x2)-(x3*x3-x2*x2)*(x2-x1));
b=(float)((y2-y1)-a*(x2*x2-x1*x1))/(float)(x2-x1);
c=y1-a*x1*x1-b*x1;
step=(float)(x3-x1)/(float)(3*20);
}
public void run() {
while(true){
try {
x+=step;
y=(int)(a*x*x+b*x+c);
if(y500){
_z.isLive=false;
}
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void drawMe(Graphics g) {
g.drawRect(x,y,20,20);
}
}
class Printer extends Thread{
private VectorDrawable v=new VectorDrawable();
private Graphics _g;
public Printer(Graphics g){
_g=g;
this.start();
}
public void Add(Drawable o){
v.add(o);
}
public void run(){
while(true){
_g.clearRect(0,0,PlantsAndZombies.screenWidth,PlantsAndZombies.screenHeight);
for(Drawable o:v){
o.drawMe(_g);
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Shoot extends MouseInputAdapter{
private PlantsAndZombies _adaptee;
public Shoot(PlantsAndZombies adaptee){
_adaptee=adaptee;
}
public void mouseClicked(MouseEvent e) {
_adaptee.Shoot();
}
}
JAVA建了一个enum,怎么初始化
估计你是不知道枚举的含义吧,一个枚举标量定义的时候就有几个值与其对应,说明这个变量可取值的集中可能,如你的方向,可取值L,LU,U,RU等。如果定义一个空的枚举值当然就是没有用的。使用的时候,直接Direction.L即可;
望满意~~
Java怎么让小飞机连续射子弹
这种是传统的Sprite图块技术,不用JLabel这样的已经固定用途的“标签”控件...
你需要设计一个基本的功能:
比如有6张子弹的各种形态-激发,爆炸等状态的图,编号0-6,要能按顺序播放这个形态
这种图块叫sprite
你可以起名一个子弹束类class Bullet ,每次激发为一束子弹即一个bullet对象。
记录下子弹的飞行坐标,作用范围,运动状态和状态对应的图片,是否碰撞,是谁发的子弹
最后还要让图形界面能绘制出来,比如Canvas,JPanel的Graphics能根据bullet的数据绘制出图片,而逻辑处理能判断出子弹的状态是否击中。
图形方面最好需要用两个大的int[]像素块作为显示的屏幕,一个int[]在内存绘制,一个int[]交给graphic显示,实现流畅的双缓冲。(现在AWT/swing,javafx等的基础功能已经超过一代二代的PS有余...)
总之,知识点很多,有过去40年左右的各种技巧...
JAVA多线程里的循环耗时
这里你要改变下思维方式。虽然物理上是两个独立事件(开枪和子弹飞),但是计算机在绘图的时候,启示是一帧帧画上去的。所有的事件都是由连续帧绘制出来的。因此,只需要一个线程就可以了:
public void run(){
int t = 0;
while(flag){
int bullet_time = t % 600;
// fire
if (bullet_time == 0) {
// draw fire event
}
else {
// draw bullets
switch (bullet_time) {
case 100:
// draw bullet 1
break;
// draw bullet 2
case 200:
break;
// draw bullet 3
case 300:
break;
// draw bullet 4
case 400:
break;
// draw bullet 5
case 500:
break;
}
}
t += 100;
try{Thread.sleep(100);}catch(Exception e){e.printStackTrace();}}}
java中bullet的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java中bullet的信息别忘了在本站进行查找喔。