Ayuda para implementar este codigo ?
Lo que suecede es que tengo este codigo que mi dibuja un obejto y me hace un moviento parabolico bueno no parabolico solo de 90 grados pero pues usando la formula del mvto. Aqui hay una parte lo ensencial y cuando le undo la flecha hacia arriba salta y cuando presiono la tecla durando varios segundos va sumando y cuando se suelta sube mucho mas al alto etc..
double v0; double v0y; double y; double y0 = 0; double w = 9.8; private Date inicio;
int velo_Moviento = 20; private boolean run = false; String mult; double arranque = 5;
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.red);
g.drawLine(30, 450, 30, 50);
g.setColor(Color.red);
g.drawLine(30, 450, 450, 450);
g.setColor(Color.green);
g.drawOval(230, 500 - (int) y - 101, 50, 50);
if(run){
double Diferencia = ((new Date()).getTime() - inicio.getTime()) / 1000d;
v0y=v0*Math.sin(Math.toRadians(90)*Diferencia);
y = y0 + v0y - (1d/2d *w*Diferencia*Diferencia);
y= y * velo_Moviento;
if (y < 0) {
y = 0;
run = false;
g.drawOval(230, 500 - (int) y - 101, 50, 50);
repaint();
}
else {
g.drawOval(230, 500 - (int) y - 101, 50, 50);
repaint();
private void formKeyReleased(java.awt.event.KeyEvent evt) {
switch (evt.getKeyCode()) {
case KeyEvent.VK_UP:
if(y==0){
v0=arranque;
inicio = new Date();
run = true;
repaint();
arranque=10;
}
private void formKeyPressed(java.awt.event.KeyEvent evt) {
if(!run){
arranque+=(0.1);
}
Lo que suecede es que estoy haciendo un juego de mario y necesito implementar este codigo del salto, la formula que me genera el salto del programa anterior. Esta es una de las tantas clases que tengo y es donde va el codigo del salto.
Especificamente el metodo isflying() que esta abajo en lo ultimo.. Me gustaria saber como yo implementaria esa formula en ese metodo para que mario me que saltado de esa manera..
En el metodo hay un codigo que cuando le undo la flecha hacia arriba el vuela presiono y sale volando y esa no es la idea.
Como procederia o alguna indicacion.. Gracias..
public class MarioMovingSpriteWrapper extends MovingSpriteWrapper{
privateboolean walking = false;
private boolean flying = false;
private boolean shooting = false;
public int vSpeed = 5;
public int hSpeed = 5;
public MarioMovingSpriteWrapper(AnimatedSprite robot) {
super(mario);
setPremode(true);
mario.setPause(
true);
}
public boolean checkCollision(Sprite sprite) {
return false;
}
protected void setParent(PlayField parent) {
if (getParent() != null) {
}
super.setParent(parent);
if (parent != null) {
int index = getParent().getSpriteIndex(getFinalWrapper());
}
}
public boolean setPosition(int x, int y) {
if (super.setPosition(x, y)) {
//bala.setPosition(x + balaoffx, y + balaoffy);
}
return false;
}
public int getCurrentPictureNumber() {
return ((AnimatedSprite) getActionSprite()).getCurrentPictureNumber();
}
public void setCurrentPictureNumber(int n) {
((AnimatedSprite) getActionSprite()).setCurrentPictureNumber(n);
}
public void setVerticalSpeed(int speed) {
vSpeed = speed;
}
public int getVerticalSpeed() {
return vSpeed;
}
public void setHorizontalSpeed(int speed) {
hSpeed = speed;
}
public int getHorizontalSpeed() {
return hSpeed;
}
public void walk(boolean action) {
walking = action;
}
public boolean isWalking() {
return walking;
}
public void fly(boolean action) {
flying = action;
}
public void shoot(boolean action){
shooting = action;
}
public boolean isShooting (){
return shooting;
}
public boolean isFlying() {
return flying;
}
int enfoquex = 0;
int enfoquey = 0;
public void move(int ticks) {
PlayField playField = getParent();
playField.setOffset(0,0);
if (isFlying()) {
if (flyStartTime==null){
flyStartTime=new Date();
}else{
if(new Date().getTime() - flyStartTime.getTime()>300){
flying = false;
}
}
((AnimatedSprite) getActionSprite()).setPause(true);
setPosition(getX(), getY() - getVerticalSpeed());
}
else if (setPosition(getX(), getY() + getVerticalSpeed())) {
((AnimatedSprite) getActionSprite()).setPause(
true);
}
else if (isWalking()) {
((AnimatedSprite) getActionSprite()).setPause(
false);
}
if (isWalking()) {
setPosition(getX() + getHorizontalSpeed(), getY());
}
else {
((AnimatedSprite) getActionSprite()).setPause(
true);
}
//repaint();
if ((getX()>= 3500 && getX()<= 3600 ) && (getY() >= 80 && getY() <= 120)){
JOptionPane.showMessageDialog(
null, "felicidades, ganaste");
System.exit(0);
}
}
double v0; double v0y; double y; double y0 = 0; double w = 9.8; private Date inicio;
int velo_Moviento = 20; private boolean run = false; String mult; double arranque = 5;
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.red);
g.drawLine(30, 450, 30, 50);
g.setColor(Color.red);
g.drawLine(30, 450, 450, 450);
g.setColor(Color.green);
g.drawOval(230, 500 - (int) y - 101, 50, 50);
if(run){
double Diferencia = ((new Date()).getTime() - inicio.getTime()) / 1000d;
v0y=v0*Math.sin(Math.toRadians(90)*Diferencia);
y = y0 + v0y - (1d/2d *w*Diferencia*Diferencia);
y= y * velo_Moviento;
if (y < 0) {
y = 0;
run = false;
g.drawOval(230, 500 - (int) y - 101, 50, 50);
repaint();
}
else {
g.drawOval(230, 500 - (int) y - 101, 50, 50);
repaint();
private void formKeyReleased(java.awt.event.KeyEvent evt) {
switch (evt.getKeyCode()) {
case KeyEvent.VK_UP:
if(y==0){
v0=arranque;
inicio = new Date();
run = true;
repaint();
arranque=10;
}
private void formKeyPressed(java.awt.event.KeyEvent evt) {
if(!run){
arranque+=(0.1);
}
Lo que suecede es que estoy haciendo un juego de mario y necesito implementar este codigo del salto, la formula que me genera el salto del programa anterior. Esta es una de las tantas clases que tengo y es donde va el codigo del salto.
Especificamente el metodo isflying() que esta abajo en lo ultimo.. Me gustaria saber como yo implementaria esa formula en ese metodo para que mario me que saltado de esa manera..
En el metodo hay un codigo que cuando le undo la flecha hacia arriba el vuela presiono y sale volando y esa no es la idea.
Como procederia o alguna indicacion.. Gracias..
public class MarioMovingSpriteWrapper extends MovingSpriteWrapper{
privateboolean walking = false;
private boolean flying = false;
private boolean shooting = false;
public int vSpeed = 5;
public int hSpeed = 5;
public MarioMovingSpriteWrapper(AnimatedSprite robot) {
super(mario);
setPremode(true);
mario.setPause(
true);
}
public boolean checkCollision(Sprite sprite) {
return false;
}
protected void setParent(PlayField parent) {
if (getParent() != null) {
}
super.setParent(parent);
if (parent != null) {
int index = getParent().getSpriteIndex(getFinalWrapper());
}
}
public boolean setPosition(int x, int y) {
if (super.setPosition(x, y)) {
//bala.setPosition(x + balaoffx, y + balaoffy);
}
return false;
}
public int getCurrentPictureNumber() {
return ((AnimatedSprite) getActionSprite()).getCurrentPictureNumber();
}
public void setCurrentPictureNumber(int n) {
((AnimatedSprite) getActionSprite()).setCurrentPictureNumber(n);
}
public void setVerticalSpeed(int speed) {
vSpeed = speed;
}
public int getVerticalSpeed() {
return vSpeed;
}
public void setHorizontalSpeed(int speed) {
hSpeed = speed;
}
public int getHorizontalSpeed() {
return hSpeed;
}
public void walk(boolean action) {
walking = action;
}
public boolean isWalking() {
return walking;
}
public void fly(boolean action) {
flying = action;
}
public void shoot(boolean action){
shooting = action;
}
public boolean isShooting (){
return shooting;
}
public boolean isFlying() {
return flying;
}
int enfoquex = 0;
int enfoquey = 0;
public void move(int ticks) {
PlayField playField = getParent();
playField.setOffset(0,0);
if (isFlying()) {
if (flyStartTime==null){
flyStartTime=new Date();
}else{
if(new Date().getTime() - flyStartTime.getTime()>300){
flying = false;
}
}
((AnimatedSprite) getActionSprite()).setPause(true);
setPosition(getX(), getY() - getVerticalSpeed());
}
else if (setPosition(getX(), getY() + getVerticalSpeed())) {
((AnimatedSprite) getActionSprite()).setPause(
true);
}
else if (isWalking()) {
((AnimatedSprite) getActionSprite()).setPause(
false);
}
if (isWalking()) {
setPosition(getX() + getHorizontalSpeed(), getY());
}
else {
((AnimatedSprite) getActionSprite()).setPause(
true);
}
//repaint();
if ((getX()>= 3500 && getX()<= 3600 ) && (getY() >= 80 && getY() <= 120)){
JOptionPane.showMessageDialog(
null, "felicidades, ganaste");
System.exit(0);
}
}
1 respuesta
Respuesta de alejosoft
1