Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Java libGDX] Funkcje statyczne - czyli jak napisać "ogólną" funkcję ?

Ostatnio zmodyfikowano dzisiaj: 9 min
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
[Java libGDX] Funkcje statyczne - czyli jak napisać "ogólną" funkcję ?
» 2026-01-15 17:09:00
Cześć. Piszę od jakiegoś czasu apki w Javie i jeden kolega zwrócił mi uwagę, że nie powinienen stosować staticów. No więc jak napisać inaczej konwerter z coords na position i odrwrotnie? Poniżej zamieszcam kod. Ja pisałem funkcje w ten sposób (z użyciem static), że można można je uruchomić poprzez
Vector2 position = Bubble.calculatePositionFromCoords((int)coordX, (int)coordY);



package com.tbane.bubble_shooter.Game;

import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import com.tbane.bubble_shooter.AssetsManager;
import com.tbane.bubble_shooter.Renderer;
import com.tbane.bubble_shooter.Time;

public class Bubble {

    int _coordX;
    int _coordY;
    static float _radius;
    static float _marginLeft;
    Vector2 _position;

    int _color;
    float _timer;

    Vector2 positionWithVariation;

    public Bubble(int x, int y, int color){
        _coordX = x;
        _coordY = y;
        _color = color;

        setPositionFromCoords(_coordX, _coordY);

        _timer = (float)(Math.random() * 6);
    }

    public Vector3 getColor(){
        Vector3 color;

        float c = 0.75f;

        switch (_color){
            case 0: color = new Vector3(c,0,0); break;
            case 1: color = new Vector3(0,c,0); break;
            case 2: color = new Vector3(0,0,c); break;
            case 3: color = new Vector3(c,c,0); break;
            case 4: color = new Vector3(0,c,c); break;
            case 5: color = new Vector3(c,0,c); break;
            default: color = new Vector3(0,0,0); break;
        }

        return color;
    }
    public void setCoords(int coordX, int coordY){
        _coordX = coordX;
        _coordY = coordY;
    }

    public void setCoords(Vector2 coords){
        _coordX = (int)coords.x;
        _coordY = (int)coords.y;
    }
    public boolean hasCoords(int x, int y){
        return x == _coordX && y == _coordY;
    }

    public static Vector2 calculatePositionFromCoords(int coordX, int coordY){
        Vector2 position = new Vector2();
        position.x = _marginLeft + (coordX + coordY * 0.5f - coordY / 2) * 2 * _radius + _radius;
        position.y = Renderer.VIRTUAL_HEIGHT - 160 - 2*_radius - coordY * 2 * _radius + _radius;
        return position;
    }

    public static Vector2 calculateCoordsFromPosition(Vector2 position) {

        int coordY = Math.round(
            (Renderer.VIRTUAL_HEIGHT - 160 - _radius - position.y)
                / (2f * _radius)
        );

        float rowOffset = (coordY % 2) * 0.5f;

        int coordX = (int)Math.round(
            (position.x - _marginLeft - _radius)
                / (2f * _radius)
                - rowOffset
        );

        return new Vector2(coordX, coordY);
    }
    public void setPositionFromCoords(int coordX, int coordY){
        _position = calculatePositionFromCoords(coordX, coordY);
    }

    public void setPosition(Vector2 newPosition){
        _position = newPosition;
        positionWithVariation = _position;
    }

    public Vector2 getPosition() {
        return new Vector2(_position);
    }

    public Vector2 getPositionWithVariation() {
        Vector2 positionWithVariation = new Vector2(_position);
        float speed = 3.0f;
        positionWithVariation.x += (float)Math.sin(speed*Time.currentTime-_timer) * 3.0f;
        positionWithVariation.y += (float)Math.cos(speed*Time.currentTime-_timer) * 3.0f;
        return positionWithVariation;
    }

    public void drawColor() {
        Vector3 color = getColor();
        float r = color.x;
        float g = color.y;
        float b = color.z;

        float radius = _radius - 5;
        Vector2 positionWithVariation = getPositionWithVariation();

        Renderer.shapeRenderer.setColor(r, g, b, 0.75f);
        Renderer.shapeRenderer.circle(positionWithVariation.x, positionWithVariation.y, radius);

        Renderer.shapeRenderer.setColor(r+0.25f, g+0.25f, b+0.25f, 0.75f);
        Renderer.shapeRenderer.circle(positionWithVariation.x - radius*4.0f/11.0f, positionWithVariation.y+radius*4.0f/11.0f, radius/4);

    }

    public void drawBubble() {

        Texture bubbleTexture = AssetsManager.getTexture("tex/bubble.png");
        if(bubbleTexture != null){

            Vector2 positionWithVariation = getPositionWithVariation();

            Sprite bubble = new Sprite(bubbleTexture);
            bubble.setSize(_radius*2, _radius*2);
            bubble.setOriginCenter();
            bubble.setCenter(positionWithVariation.x, positionWithVariation.y);
            bubble.draw(Renderer.spriteBatch);
        }
    }

}


a tak to wywołuję:

_animatedPositioningBubbles.add(
    new AnimatedPositioningBubble(
        b, // bubble
        b.getPosition(), // global position
        Bubble.calculatePositionFromCoords((int)coords.x, (int)coords.y) // here - coords
    ));
P-183803
skovv
» 2026-01-15 18:14:50
Może zapytaj tego kolegi który odradził statyczne funkcje :D Nie słuchaj ludzi, nie trzymaj się kluczowo tego co Ci powiedzą bo to nie zawsze poprawne. Nie napiszesz tego inaczej zbytnio, jeśli już no to po co skoro tak działa a nie piszesz gta 6 tylko małą gierkę?
P-183804
tBane
Temat założony przez niniejszego użytkownika
» 2026-01-15 18:28:11
No właśnie sam nie wiedział jak to inaczej zapisać.. no ale mówił, że statici to samo zło i w ogóle takie tam :D W każdym bądź razie chciałbym pisać poprawny kod, tak więc pytam :-)
P-183805
skovv
» 2026-01-15 19:40:20
No to trochę głupie skoro mówi nie używaj static bo to samo zło a jednocześnie nie wie jak to zrobić inaczej... no sory, ale głąb z niego. Nie możesz słuchać wiecznie kogoś bo coś tam pod nosem gada.. Jak ktoś mówi nie rób tak ale nie wie jak masz to robić inaczej to czy warto słuchać kogoś takiego? Zostaw static, to żaden błąd ani zło :D
P-183806
tBane
Temat założony przez niniejszego użytkownika
» 2026-01-15 20:01:53
Ok :-)
P-183807
« 1 »
  Strona 1 z 1