java中bullet的简单介绍

博主:adminadmin 2023-01-02 12:06:09 749

今天给各位分享java中bullet的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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的信息别忘了在本站进行查找喔。