mercury Admin
Anzahl der Beiträge : 343Punkte : 473Anmeldedatum : 02.12.09Alter : 39 Thema: Animationen Mi Mai 30, 2012 11:05 am Wir besprechen das später genauer, ich hab mich kuz mal mit der Animation auseinander gesetzt, nichts wildes, ich habe meinen bereits animierten Sprite eingefügt.
Hier erstmal der neue Sprites Ordner:
www.mercuryproductions.de/wu/programmiergruppe/sprites.zip Hier der Code, da BitBucket ja leider nicht mehr zugänglich ist...:
Code: /*alle bisherigen Imports*/ public class AdvTest extends Game{ private BufferedImage testSheet1; //wir legen arrays für jede Bewegung an, "idle habe ich bislang außer Art gelassen) private BufferedImage[] heroFront = new BufferedImage[4]; private BufferedImage[] heroBack = new BufferedImage[4]; private BufferedImage[] heroLeft = new BufferedImage[4]; private BufferedImage[] heroRight = new BufferedImage[4]; private BufferedImage[] heroShootFront = new BufferedImage[4]; private BufferedImage[] heroShootBack = new BufferedImage[4]; private BufferedImage[] heroShootLeft = new BufferedImage[4]; private BufferedImage[] heroShootRight = new BufferedImage[4]; //frame ist für die Animation private static int frame=0; private int xstart; private int ystart; private int xend; private int yend; private int figposx; private int figposy; private boolean shoot; private int shotposx, shotposy; private int enemy; private int enemyposx; private int enemyposy; public AdvTest(){ title = "AdvTest"; width = 800; height = 600; xstart = 0; ystart = 0; figposx = 350; figposy = 250; //angepasste Bildabmessungen xend = figposx+60; yend = figposy+90; } public static void main(String[] args) { GameApplication.start(new AdvTest()); } private boolean collision(int x, int y){ if(x >= enemyposx && x <= enemyposx+77 && y >= enemyposy && y <= enemyposy+122) return true; return false; } public void mousePressed(MouseEvent e) { int x = e.getX(); int y = e.getY(); if(collision(x,y)){ shoot = true; //TODO: Anpassen shotposx=figposx+81; shotposy=figposy+49; }else{ xend = x; yend = y; } } @Override public void update() { //berechnung von frame für die Animation if(frame <39)frame++; else frame=0; //enemy if (xstart == -100 || xstart == -101){ enemy++; enemyposx = 0; enemyposy = 0; } //enemy movement if(enemyposx < figposx)enemyposx++; if(enemyposx > figposx)enemyposx--; if(enemyposy < figposy)enemyposy++; if(enemyposy > figposy)enemyposy--; //movement mit angepassten Bildabmessungen if(figposx+60 < xend){ xstart -= 2; xend -= 2; }else if(figposx+60 > xend){ xstart += 2; xend += 2; } if(figposx+42 - xend == 1) xend++; else if(figposx+42 - xend == -1) xend--; if(figposy+90 < yend){ ystart -= 2; yend -= 2; }else if(figposy+90 > yend){ ystart += 2; yend += 2; } if(figposy+90 - yend == 1) yend++; else if(figposy+90 - yend == -1) yend--; /* double xVel = xend - xstart; double yVel = yend - ystart; double mag = Math.sqrt(xVel * xVel + yVel * yVel); xVel = xVel * 2 / mag; yVel = yVel * 2 / mag; if (xstart < xend && (xstart + xVel) > xend) { xstart = xend; } else if (xstart != xend) { xstart += xVel; } if (ystart < yend && (ystart + yVel) > yend) { ystart = yend; } else if (ystart != yend) { ystart += yVel; } */ //shoot if(shoot){ if(shotposx < enemyposx)shotposx+=4; if(shotposx > enemyposx)shotposx-=4; if(shotposy < enemyposy)shotposy+=4; if(shotposy > enemyposy)shotposy-=4; if(collision(shotposx,shotposy)){ enemy--; shoot=false; } } } @Override public void draw(Graphics g) { g.drawImage(testSheet1, xstart, ystart, null); //hier findet die Amgie statt, je nachdem wo er sich bewegt wird ein anderes Array abgerufen. //dabei wird der frame alle 10 Durchgänge gewechselt if(yend > figposy+90 && yend-figposy+90 > xend-figposx){ g.drawImage(heroFront[frame/10], figposx, figposy, null); }else if(yend < figposy+90 && yend-figposy+90 > xend-figposx){ g.drawImage(heroBack[frame/10], figposx, figposy, null); }else{ g.drawImage(heroFront[0], figposx, figposy, null); } if(enemy != 0){ g.drawImage(testSheet1.getSubimage(207, 1021, 77, 122), enemyposx, enemyposy, null); } if(shoot){ g.drawImage(testSheet1.getSubimage(2, 1010, 8, 8), shotposx, shotposy, null); } } @Override public void init() { try { //das füllen der Arrays, da fehlt noch einiges. heroFront[0] = ImageIO.read(AdvTest.class.getResource("/sprites/Hero-front-1.png")); heroFront[1] = ImageIO.read(AdvTest.class.getResource("/sprites/Hero-front-2.png")); heroFront[2] = ImageIO.read(AdvTest.class.getResource("/sprites/Hero-front-3.png")); heroFront[3] = ImageIO.read(AdvTest.class.getResource("/sprites/Hero-front-4.png")); heroBack[0] = ImageIO.read(AdvTest.class.getResource("/sprites/Hero-back-1.png")); heroBack[1] = ImageIO.read(AdvTest.class.getResource("/sprites/Hero-back-2.png")); heroBack[2] = ImageIO.read(AdvTest.class.getResource("/sprites/Hero-back-3.png")); heroBack[3] = ImageIO.read(AdvTest.class.getResource("/sprites/Hero-back-4.png")); //add more testSheet1=ImageIO.read(AdvTest.class.getResource("/sprites/testSheet1.png")); }catch(IOException e){ System.out.println(e); } } }
uuuh, sorry wegen der Farbton ist so im Template, ich werds bei Zeiten ändern.
Gefällt mir Gefällt mir nicht