2012-04-08 1 views
0
import java.awt.*; 
import java.awt.image.ImageObserver; 

import javax.swing.*; 

public class CharacterMove { 

CharacterCollision CharacterCollision; 

public static int vel = 2; 
public final int baseVel = 2; 
public int spriteHeight = 23; 
public int spriteWidth =16; 
public int x_pos = 400/2; 
public int y_pos = 400/2; 
public int count0 = 0,count1 = 0,count2 = 0,count3=0,count4 = 0,count5 = 0; 
public ImageIcon Characterobj; 
public Image Character; 
public boolean MovingUp = false; 
public boolean MovingDown = false; 
public boolean MovingRight = false; 
public boolean MovingLeft = false; 
public boolean MovingStill = false; 
public boolean UpRight = false; 
public boolean UpLeft = false; 
public boolean DownRight = false; 
public boolean DownLeft = false; 




public CharacterMove(){ 
    Characterobj = new ImageIcon(this.getClass().getResource("Character.png")); 
    Character = Characterobj.getImage(); 


} 

public void move(boolean moving) { 
    if (MovingLeft) { 

     x_pos-=vel; 
    } 
    if (MovingRight) { 
     x_pos+=vel; 
    } 
    if (MovingUp) { 
     y_pos-=vel; 

    } 
    if (MovingDown) { 
     y_pos+=vel; 
    } 
    if(MovingDown&&MovingLeft){ 
     DownLeft = true; 
     vel = 1; 
    }else{ 
     DownLeft = false; 
    } 
    if(MovingDown&&MovingRight){ 
     DownRight = true; 
     vel = 1; 
    }else{ 
     DownRight = false; 
    } 
    if(MovingUp&&MovingLeft){ 
     UpLeft = true; 
     vel = 1; 
    }else{ 
     UpLeft = false; 
    } 
    if(MovingUp&&MovingRight){ 
     UpRight = true; 
     vel = 1; 
    }else{ 
     UpRight = false; 
    } 

    if(UpRight||UpLeft||DownLeft||DownRight){ 

     vel = 1; 
    }else{ 
     vel = baseVel; 
    } 

} 
public void draw(Graphics g){ 

    Graphics2D g2d = (Graphics2D) g; 

    if(MovingUp){ 

     drawSpriteFrame(Character, g2d, x_pos, y_pos, 0, count0, 16, 23); 
     if(count0 <3){ 
      count0++; 
     }else{ 
      count0=0; 
     } 
    }else if(MovingDown){ 

     drawSpriteFrame(Character, g2d, x_pos, y_pos, 2, count1, 16, 23); 
     if(count1 <3){ 
      count1++; 
     }else{ 
      count1=0; 
     } 
    }else if(MovingLeft){ 

     drawSpriteFrame(Character, g2d, x_pos, y_pos, 3, count2, 16, 23); 
     if(count2 <3){ 
      count2++; 
     }else{ 
      count2=0; 
     } 
    }else if(MovingRight){ 

     drawSpriteFrame(Character, g2d, x_pos, y_pos, 1, count3, 16, 23); 
     if(count3 <3){ 
      count3++; 
     }else{ 
      count3=0; 
     } 
    } 


} 
public int characterRectX(){ 
    return 16; 

} 
public int characterRectY(){ 
    return 23; 

} 
public void drawSpriteFrame(Image source, Graphics2D g2d, int x, int y, 
     int columns, int row, int width, int height) { 
    int frameX = (row) * width; 
    int frameY = (columns) * height; 
    g2d.drawImage(source, x, y, x + width, y + height, frameX, frameY,frameX + width, frameY+height ,(ImageObserver) this); 
} 

}не может быть приведен к java.awt.image.ImageObserver

Здравствуйте, Каждый раз, когда я запускаю этот код, я получаю ошибку:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: CharacterMove cannot be cast to java.awt.image.ImageObserver 
    at CharacterMove.draw(CharacterMove.java:91) 

Я пытаюсь оживить перемещение персонажа при нажатии клавиш со стрелками. но я получаю эту ошибку, когда изображение пытается окрашиваться. Я использую метод, который рисует определенную часть изображения, там я тестировал этот метод, используя ту же картинку в другом проекте, и он работал нормально. Я не знаю, что не так. Любая помощь будет принята с благодарностью!

Благодаря

ответ

0

g2d.drawImage(source, x, y, x + width, y + height, frameX, frameY,frameX + width, frameY+height ,(ImageObserver) this);

Последний параметр, вы пытаетесь преобразовать «это» (экземпляр класса CharacterMove) к экземпляру класса ImageObserver ... Это не кажется мне это возможно, так как CharacterMove не расширяет ImageObserver.

Редактировать: Я посмотрел на JavaDoc сейчас. Просто введите:

public class CharacterMove implements ImageObserver 

и реализовать необходимые методы из ImageObserver, который является интерфейсом. Затем, в конце, удалите бросок, вы не можете передать в интерфейс. Это должно сработать.

+0

Что было бы возможным для этого? – grimrader22

+0

Зачем вам это нужно? Я никогда не программировал графику раньше, но я знаю достаточно оснований Java, чтобы увидеть, что вы просто не можете бросать экземпляры класса в другой экземпляр другого случайного класса ... Вам нужно будет поместить 'public class CharacterMove extends ImageObserver', чтобы даже попытаться бросить его на ImageObserver. Что ты пытаешься сделать? Каким параметром запрашивается метод drawImage в конце? – MarioDS

+0

ЭТО РАБОТАЕТ! Спасибо!!! – grimrader22