Jump to content

Problema com atrelar objetos


Go to solution Solved by Kleverson Cruz,

Recommended Posts

Ol√° amigos, estou desenvolvendo um jogo, e me deparei com um problema que esta complicado de resolver....

estou criando um healthBar para visualizar a vida dos monstros criados. COnsegui adicionar o abençoado com o metodo canvas.drawRect.

S√≥ que tem um problema, ao movimentar o personagem, o mesmo nao fica atrelado ao monstro, ele sai andando por ai ūüėě

Vou disponilizar um pouquinho do que estou fazendo...

 

public void draw(Canvas canvas, GameDisplay gameDisplay) {
       
        float width = 80;
        float height = 15;
        float margin = 2;
        float x = (float) gameDisplay.gameToDisplayCoordinatesX(positionX)-100;
        float y = (float) gameDisplay.gameToDisplayCoordinatesY(positionY);
        float distanceToPlayer = 75;
        // draw circle
        canvas.drawCircle(
            (float) gameDisplay.gameToDisplayCoordinatesX(positionX),
                (float) gameDisplay.gameToDisplayCoordinatesY(positionY),
                (float) radius,
                paint
        );
        // Draw border
        float borderLeft, borderTop, borderRight, borderBottom;
        borderLeft = x - width / 2;
        borderRight = x + width / 2;
        borderBottom = y - distanceToPlayer;
        borderTop = borderBottom - height;
        canvas.drawRect(
                (float) gameDisplay.gameToDisplayCoordinatesX(borderLeft),
                (float) gameDisplay.gameToDisplayCoordinatesY(borderTop),
                (float) gameDisplay.gameToDisplayCoordinatesX(borderRight),
                (float) gameDisplay.gameToDisplayCoordinatesY(borderBottom),
                borderPaint);

        // Draw health
        float healthLeft, healthTop, healthRight, healthBottom, healthWidth, healthHeight;
        healthWidth = width - 2 * margin;
        healthHeight = height - 2 * margin;
        healthLeft = borderLeft + margin;
        healthRight = healthLeft + healthWidth * 1;
        healthBottom = borderBottom - margin;
        healthTop = healthBottom - healthHeight;
        canvas.drawRect(
                (float) gameDisplay.gameToDisplayCoordinatesX(healthLeft),
                (float) gameDisplay.gameToDisplayCoordinatesY(healthTop),
                (float) gameDisplay.gameToDisplayCoordinatesX(healthRight),
                (float) gameDisplay.gameToDisplayCoordinatesY(healthBottom),
                healthPaint);

    }

No codigo acima eu crio um circulo e depois coloco a barra acima do circulo... Mas ao andar com o joystick a barra se separa do circulo, como "unifica-los" para andarem juntos?

ao monstro andar, a barra fica perfeita, se movimenta pelo mapa sobre o monstro, m√°s ao movimentar o joystick ela se movimenta de acordo com o player...

 

Edited by Bernard Weger
Link to comment
Share on other sites

  • Solution

Ol√°.
Pelo que descreveu parece voc√™ est√° calculando as coordenadas da barra de sa√ļde com base nas coordenadas do jogador.

Verifique no seguinte trecho se as variável positionX e positionY estão com as coordenadas do monstro.

 float x = (float) gameDisplay.gameToDisplayCoordinatesX(positionX)-100;
 float y = (float) gameDisplay.gameToDisplayCoordinatesY(positionY);

 

  • Curtir 1
Link to comment
Share on other sites

Olá amigo! Sim, essas sao as coordenadas do monstro, ele até chega a inserir a HealthBar sobre o monstro, vou lhe enviar uma foto do que esta ocorrendo....

 

O problema nao e inserir a barra sobre o mosntro e sim que ao movimentar o joyStick a barra sai da cabeça do monstro acontecendo o que vc esta dizendo, que parece que estou inserindo as coordendas do player.

 

A primera foto é a posição inicial do player.. Perceba que esta com o HealthBar, más ao mover o player a barra desalinha da cabeça do monstro.

Vou adicionar a outra classe que pega esses valor.

package com.example.bwgame;

import android.graphics.Rect;
import android.view.Display;

import com.example.bwgame.gameobject.GameObject;
import com.example.bwgame.gameobject.Player;

public class GameDisplay {
    public final Rect DISPLAY_RECT;
    private final int widthPixels;
    private final int heightPixels;
    private final GameObject centerObject;
    private final double displayCenterX;
    private final double displayCenterY;
    private double gameToDisplayCoordinatesOffsetX;
    private double gameToDisplayCoordinatesOffsetY;
    private double gameCenterX;
    private double gameCenterY;

    public GameDisplay(int widthPixels, int heightPixels, GameObject centerObject) {
        this.widthPixels = widthPixels;
        this.heightPixels = heightPixels;
        DISPLAY_RECT = new Rect(0, 0, widthPixels, heightPixels);

        this.centerObject = centerObject;

        displayCenterX = widthPixels/2.0;
        displayCenterY = heightPixels/2.0;

        update();
    }

    public void update() {
        gameCenterX = centerObject.getPositionX();
        gameCenterY = centerObject.getPositionY();

        gameToDisplayCoordinatesOffsetX = displayCenterX - gameCenterX;
        gameToDisplayCoordinatesOffsetY = displayCenterY - gameCenterY;
    }

    public double gameToDisplayCoordinatesX(double x) {
        return x + gameToDisplayCoordinatesOffsetX;
    }
    public double gameToDisplayCoordinatesY(double y) {
        return y + gameToDisplayCoordinatesOffsetY;
    }


    public Rect getGameRect() {
        return new Rect(
                (int) (gameCenterX - widthPixels/2),
                (int) (gameCenterY - heightPixels/2),
                (int) (gameCenterX + widthPixels/2),
                (int) (gameCenterY + heightPixels/2)
        );
    }
}

 

Desde ja agradeço sua ajuda!

Screenshot_20230717_223802_BWGame.jpg

Screenshot_20230717_223808_BWGame.jpg

Link to comment
Share on other sites

Resolvido amigo! Sua dica foi muito valisosa para mim! Realmente estava pegando o valor do centro da tela e nao do PositionX do devido elemente a ser criado!!! Obrigado!

o Codigo ficou assim

float x =(float) positionX;
float y = (float) positionY;;
  • Curtir 1
  • Amei 1
Link to comment
Share on other sites

2 horas atr√°s, Bernard Weger disse:

Resolvido amigo! Sua dica foi muito valisosa para mim! Realmente estava pegando o valor do centro da tela e nao do PositionX do devido elemente a ser criado!!! Obrigado!

o Codigo ficou assim

float x =(float) positionX;
float y = (float) positionY;;

Ufaa fico feliz que tenha dado certo!

  • Curtir 1
  • Amei 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...