java存储对象的数组_在数组java中存储不同的对象 (Storing different objects in an array java)...

2015-03-19 17:53:07

0

What I need to do is storing different objects of an "Obstacle" super class in an array, and then perform the same actions as if I had one. So I need to be able to draw all the objects and also make them collide with the ball class.

So I tried to put all the instances of an object in an array in a for loop, and then I tried to paint them. But I can't figure out how to use the functions on the objects if they are stored in an array.

I tried to do this:

for(int i = 0;i

objects[0].paint(g);

}

but the "paint(g)" part is just highlighted in red and it doesn't work.

If someone could help me I would be really happy! I haven't stored objects in arrays before, so I'm kind of clueless as what to do.

I also tried making the for loop like this:

if(i>=1 && i<15){

Obstacle star = new StarObstacle(rand.nextInt(400),rand.nextInt(400));

objects[i]= star;

star.paint(g);

}

Here they actually show up, but the stars are just flying all over the screen, so something must be changing x and y values all the time.

edit: sorry accidentally added the whole code instead of only the part I need help on.

It's the for loop in the Main(int x,int y){} scope

package com.company;

import javax.swing.*;

import java.awt.*;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.util.Random;

public class Main extends JPanel implements KeyListener {

Ball b;

TriangleObstacle o;

BorderObstacle border;

StarObstacle s;

Player player;

int bounceCount=0;

Object[] objects;

Random rand = new Random();

Main(int width, int height) {

//create a new black ball at the center of the screen

b = new Ball(width*0.5f, height*0.5f, 3, 0,0,0);

//make a border around the window

border = new BorderObstacle(width, height);

objects = new Object[30];

//setup a triangle obstacle

o = new TriangleObstacle(width*0.3f, height*0.7f, 200, 50);

s = new StarObstacle(400,300);

player = new Player();

this.addKeyListener(this);

this.setFocusable(true); //needed to make

for(int i = 0; i < objects.length;i++){

if(i==0){

objects[0]= new Player();

}

if(i>=1 && i<15){

objects[i]= new StarObstacle(rand.nextInt(400),rand.nextInt(400));

}

if(i>15){

objects[i]= new TriangleObstacle(30,30,rand.nextInt(400),rand.nextInt(400));

}

}

}

public void update() {

//move over all obstacles and check whether they should bounce the ball

border.bounceBall(b);

o.bounceBall(b);

s.bounceBall(b);

if(player.bounceBall(b)){

bounceCount++;

}

//move ball based on speed and location

b.move();

player.move(); //updates my player object.

this.repaint(); //runs the paint method on the object

}

@Override

public void paint(Graphics g) {

super.paint(g);

Graphics2D g2 = (Graphics2D) g;

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g.setFont(new Font("TimesRoman", Font.PLAIN, 20));

g.drawString("Amount of bounces on Player: " + bounceCount, 300, 100);

b.paint(g);

o.paint(g);

s.paint(g);

player.paint(g);

border.paint(g);

}

public static void main(String[] args) {

int width = 800;

int height = 600;

JFrame frame = new JFrame("Pinball"); //create a new window and set title on window

frame.setSize(width, height); //set size of window

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //set the window to close when the cross in the corner is pressed

Main m = new Main(width,height-22); //-22 to account for menubar height //create a new object and runs constructor for initial setup of the program

frame.add(m); //add the content of the object to the window

frame.setVisible(true); //make the window visible

while (true) { //keep running a loop

//each time the loop is run do

m.update(); //run the update method on the object

try {

Thread.sleep(10); //stops this part of the program for 10 milliseconds to avoid the loop locking everything. Now the screen has time to update content etc.

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

@Override

public void keyTyped(KeyEvent e) {

}

@Override

public void keyPressed(KeyEvent e) {

int code = e.getKeyCode(); //gets input as keycode.

if(code==KeyEvent.VK_RIGHT){

player.setRight(true); //sets the movement for right to true, making it move by 5 pixels in the positive direction, for each update.

player.setLeft(false);

}

if(code==KeyEvent.VK_LEFT){

player.setLeft(true);

player.setRight(false);

}

}

@Override

public void keyReleased(KeyEvent e) { //keyReleased setting them to false to prevent the object to keep moving.

int code = e.getKeyCode();

if(code==KeyEvent.VK_RIGHT){

player.setRight(false);

}

if(code==KeyEvent.VK_LEFT){

player.setLeft(false);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值