C
coolerouny
morgen!
kann mir vielleicht einer helfen wie ich einen winkel zwischen zwei punkten ausrechnen kann
ich schaff es zwar eigentlich, aber irgendwie geht das unter 45° nicht und es hängt sich nach einer zeit auf
und ich möchte das ganze dann so programmiern, dass es bei jedem pc gleich schnell geht, also dass es bei einem schnelleren pc nicht schneller ist.
den code könnt ihr euch ja anschaun...
kann mir vielleicht einer helfen wie ich einen winkel zwischen zwei punkten ausrechnen kann
ich schaff es zwar eigentlich, aber irgendwie geht das unter 45° nicht und es hängt sich nach einer zeit auf
und ich möchte das ganze dann so programmiern, dass es bei jedem pc gleich schnell geht, also dass es bei einem schnelleren pc nicht schneller ist.
den code könnt ihr euch ja anschaun...
Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class rundown extends Applet
implements MouseMotionListener,MouseListener,KeyListener
{
int xSize = 640; //größe
int ySize = 480;
int mouseX = 0; //maus position
int mouseY = 0;
int xpos = 100; //startposition
int ypos = 100;
int xunt=0,yunt=0;
int durch = 20;
int speed = 5; //speed halt
int linksrechts = 0; // -1 = links, 1 = rechts
int obenunten = 0; // -1 = oben, 1 = unten
int shoot = 0;
double pi = 3.141592654; //pi halt
//büdl
int iconHeight = 32;
int iconWidth = 32;
int iconCount = 36; //eins mehr zur sicherheit
Image icon[] = new Image[iconCount];
Image allIcons;
public void init()
{
loadImages("mandal.gif");
addMouseMotionListener(this);
addMouseListener(this);
addKeyListener(this);
setSize(xSize,ySize);
}
Image buffer;
Graphics2D gBuffer;
public void paint(Graphics g)
{
xpos = BewegungX();
ypos = BewegungY();
// Double-Buffering
if (buffer==null)
{
buffer = createImage(this.getSize().width, this.getSize().height);
gBuffer = (Graphics2D)buffer.getGraphics();
}
gBuffer.clearRect(0,0,xSize,ySize);
// Antialiasing
gBuffer.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//zeichnen
gBuffer.drawImage(icon[Direction()/36], xpos-32/2, ypos-32/2, this);
gBuffer.drawString("dir = " + Direction(),300,300);
//rahmen
gBuffer.drawRect(0,0,xSize-1,ySize-1);
if (shoot == 1)
gBuffer.drawLine(xpos,ypos,mouseX,mouseY);
g.drawImage (buffer, 0, 0, this);
repaint();
}
private int BewegungX()
{
//bewegung in x-Richtung
if (linksrechts == 1)
xpos += speed;
else if (linksrechts == -1)
xpos -= speed;
return xpos;
}
private int BewegungY()
{
//bewegung in y-Richtung
if (obenunten == 1)
ypos += speed;
else if (obenunten == -1)
ypos -= speed;
return ypos;
}
private int Direction()
{
xunt = xpos-mouseX;
yunt = ypos-mouseY;
int dir = (int)(Math.atan(yunt/xunt)*180/pi); //winkel in deg ausrechnen
return dir;
}
public void loadImages(String s)
{
MediaTracker t=new MediaTracker(this);
allIcons=createImage(1,1);
try
{
URL u=new URL(getCodeBase(), s);
allIcons=Toolkit.getDefaultToolkit().getImage(u);
t.addImage(allIcons,0);
}
catch (MalformedURLException me)
{
System.out.println("MalformedURLException: " + me);
}
try
{
t.waitForAll(15000);
}
catch (InterruptedException e)
{
System.out.println("interrupted");
}
for (int i=0; i < iconCount; i++)
{
Image z=createImage(iconWidth,iconHeight);
Graphics g=z.getGraphics();
g.clipRect(0,0,iconWidth,iconHeight);
g.drawImage(allIcons,-i*iconWidth,0,this);
icon[i]=z;
}
}
public void mouseMoved(MouseEvent event)
{
mouseX = event.getX();
mouseY = event.getY();
}
public void mouseExited (MouseEvent event){;}
public void mouseEntered(MouseEvent event){;}
public void mouseReleased(MouseEvent event)
{
shoot = 0;
}
public void mousePressed(MouseEvent event)
{
shoot = 1;
mouseX = event.getX();
mouseY = event.getY();
}
public void mouseClicked(MouseEvent event){;}
public void mouseDragged(MouseEvent event)
{
mouseX = event.getX();
mouseY = event.getY();
}
public void keyTyped(KeyEvent evt)
{
char ch = evt.getKeyChar();
if (ch == 'a')
linksrechts = -1;
else if (ch == 'd')
linksrechts = 1;
if (ch == 'w')
obenunten = -1;
else if(ch == 's')
obenunten = 1;
}
public void keyPressed(KeyEvent evt){;}
public void keyReleased(KeyEvent evt)
{
char ch = evt.getKeyChar();
if (ch == 'a' || ch == 'd')
linksrechts = 0;
if (ch == 'w' || ch == 's')
obenunten = 0;
}
public void update(Graphics g){paint(g);}
}
Anhänge
Zuletzt bearbeitet von einem Moderator: