Pygame Vampire Survivors?

Hallo ich programmiere gerade ein Spiel in Pygame das dem Spiel Vampire Survivors ähnelt ich habe aktuell das problem das Problem das wenn der spieler auf die Gegner hinzu läuft die Gegener nach hinten verschoben werden staat nach vorn weil.

Also aktuell wenn ich stehe laufen die Gegner auf mich zu.

Und wenn ich von den Gegnern weg laufe werden sie aus dem Screen geschoben.

Aber wenn ich auf sie zu laufe werden sie auch aus dem Screen geschoben.

Obwohl sie dann normal laufen sollen als ob der spieler steth hier der wichtige code:   def update(self, dt, player, screen_width, screen_height):

    if not self.collided_with_enemy and self.is_visible:

      dx = player.x - self.x

      dy = player.y - self.y

      distance = max(1, pygame.math.Vector2(dx, dy).length())

      direction = pygame.math.Vector2(-dx / distance, -dy / distance)

      player_rect = pygame.Rect(player.x, player.y, player.hitbox_width, player.hitbox_height)

      enemy_rect = pygame.Rect(self.x, self.y, self.hitbox_width, self.hitbox_height)

      if player_rect.colliderect(enemy_rect):

        player.handle_collision()

        self.speed = 0

        return

      if dx != 0 and dy != 0:

        dx = 0

        dy = 0

      speed_multiplier = self.speed * dt

      if player.is_moving:

        speed_multiplier *= 0.5

      # Anpassung der Bewegungsrichtung basierend auf dem Spielerstatus

      if player.is_moving:

        self.x -= direction.x * speed_multiplier

        self.y -= direction.y * speed_multiplier

      else:

        self.x += direction.x * speed_multiplier

        self.y += direction.y * speed_multiplier

      self.x = max(-self.hitbox_width, min(self.x, screen_width))

      self.y = max(-self.hitbox_height, min(self.y, screen_height))

      self.animation_timer += dt

      if self.animation_timer >= self.animation_speed:

        self.animation_timer = 0

        self.current_frame = (self.current_frame + 1) % self.animation_frames

      # Anpassung der Geschwindigkeit basierend auf der Bewegungsrichtung des Spielers

      player_direction = pygame.math.Vector2(player.x - self.x, player.y - self.y)

      player_distance = max(1, player_direction.length())

      player_direction = player_direction.normalize()

      dot_product = player_direction.dot(direction)

      if dot_product > 0.5:

        # Spieler bewegt sich dem Gegner entgegen

        self.speed = self.original_speed + 100

      else:

        # Spieler bewegt sich vom Gegner weg

        self.speed = self.original_speed - 100

    else:

      self.x += self.direction * self.speed * dt

      self.collided_with_enemy = False

    for enemy in enemies:

      if check_enemy_collision(player, enemy):

        break

Java, JavaScript, Minecraft, C Sharp, Programmiersprache, Python, Python 3, Unity, Pygame
warum springt mein 3d Charakter ununterbrochen Unity c#?

Hallo, ich habe ein problem, und zwar möchte ich das mein 3d Charakter auf welchen man von schräg hinten schaut springt, wenn man Leertaste drückt, dies macht er auch, jedoch nachdem man einmal Leertaste gedrückt hat hört er nicht mahr auf zu springen. Vielen Dank für die hilfe schon mal im Vorraus!

Code(des Charakters):

using UnityEngine;

using System.Collections;

public class NewBehaviouerScript1 : MonoBehaviour

{

  private const float gravityMultiplier = 2;

  public float walkingSpeed = 5;

  public float jumpingSpeed = 10;

  

  private bool shouldJump;

  private bool previouslyGrounded;

  private bool hasJumped;

  private Camera targetCamera;

  private Vector2 inputVector;

  private Vector3 movingDirection = Vector3.zero;

  private CollisionFlags collisionFlags;

  private float timeSinceNotGrounded = 0;

  private void Awake()

  {

    Application.targetFrameRate = 60;

    targetCamera = GetComponentInChildren<Camera>();

  }

  private void Update()

  {

    if (shouldJump && IsGrounded() && !hasJumped)

    {

      hasJumped = true;

      shouldJump = false;

      movingDirection.y = jumpingSpeed;

    }

    if (Input.GetKeyDown(KeyCode.Space))

    {

      shouldJump = true;

    }

    if (!previouslyGrounded && IsGrounded())

    {

      previouslyGrounded = true;

      timeSinceNotGrounded = 0;

      hasJumped = false;

    }

    if (previouslyGrounded && (!IsGrounded()))

    {

      timeSinceNotGrounded += Time.deltaTime;

      if (timeSinceNotGrounded > 0.02f)

      {

        previouslyGrounded = false;

      }

    }

  }

  private void FixedUpdate()

  {

    ProcessInput();

    Vector3 desiredMove = Vector3.zero;

    if (inputVector.y > 0) // move forward

    {

      desiredMove = -transform.forward * inputVector.y;

    }

    else if (inputVector.y < 0) // move backward

    {

      desiredMove = -transform.forward * inputVector.y;

    }

    if (inputVector.x > 0) // rotate right

    {

      transform.Rotate(Vector3.up, 90 * Time.fixedDeltaTime);

    }

    else if (inputVector.x < 0) // rotate left

    {

      transform.Rotate(Vector3.up, -90 * Time.fixedDeltaTime);

    }

    RaycastHit hitInfo;

    if (Physics.Raycast(transform.position, Vector3.down, out hitInfo, 1.01f))

    {

      desiredMove = Vector3.ProjectOnPlane(desiredMove, hitInfo.normal).normalized;

    }

    movingDirection.x = desiredMove.x * walkingSpeed;

    movingDirection.z = desiredMove.z * walkingSpeed;

    if (!IsGrounded())

    {

      movingDirection += Physics.gravity * gravityMultiplier * Time.fixedDeltaTime;

    }

  

    transform.position += movingDirection * Time.fixedDeltaTime;

  }

 

  private void ProcessInput()

  {

    float horizontal = Input.GetAxis("Horizontal");

    float vertical = Input.GetAxis("Vertical");

    inputVector = new Vector2(horizontal, vertical);

    if (inputVector.sqrMagnitude > 1)

    {

      inputVector.Normalize();

    }

  }

  private bool IsGrounded()

  {

    return Physics.Raycast(transform.position, Vector3.down, 1.01f);

  }

}

Logik, Unity
Welche Grafikkarte für GameDesigner? Nicht mehr als 750Euro bitte?

Grüßt euch,

ich studiere momentan GameDesign wo wir ziemlich viele grafisch aufwendige Programme verwenden, weswegen ich meinen PC gerne aufstocken würde.

Mein PC läuft bei schweren 3D Anwendungen nicht mehr so gut. Ich nutze überwiegend Programme wie Unreal Engine 5, Unity 3D, Photoshop, InDesign, Blender. Ich rendere auch immer wieder Videos.

Der PC ist ziemlich neu, bis auf die Grafikkarte, da habe ich eine alte GTX950 genommen weil ich warten wollte bis die Preise besser werden.

Nunja, jetzt will ich ehrlich gesagt nicht mehr warten da die Programme und Spiele das nicht mehr so gut mitmachen mit der Grafikkarte.

Hier das sind die Komponenten meines PCs.

Corsair Airflow 4000D

Gigabyte B550 Aorus Elite AX V2

Alpenföhn Brocken 3             

AMD Ryzen 7 5800X 8-Core Processor 

1TB WD Black SN750 Gaming M.2

2TB Crucial MX500 2.5

750 Watt Seasonic Focus GX 80+ Gold

Crucial Ballistix 32GB Kit DDR4-3600 CL16

GeForce GTX 950 (Das würde ich gerne ersetzen)

Ich habe mir mal die GeForce RTX3060TI angesehen

https://www.amazon.de/gp/product/B096Y2SND1/ref=ox_sc_act_title_3?smid=A3JWKAKR8XB7XF&psc=1

https://www.amazon.de/gp/product/B09831RB76/ref=ox_sc_act_title_2?smid=AVYEOB55JKUJU&psc=1

,bin mir aber unsicher ob es die passende für meine Anforderungen ist und zu meinem PC passt. Deswegen wollte ich mal euch fragen was Ihr mir so empfehlen könnt?

Danke im voraus.

PC, Computer, Technik, Grafikkarte, Hardware, IT, Gaming, Game Design, gamedevelopment, Informatik, PC-Komponenten, pc zusammenstellen, Unity 3D, PC Zusammenbauen, Unity, Unreal Engine, Unreal Engine 5
Fehler im Skript?

Ich probiere gerade ein eigenes Jump and Run Spiel zu Programmieren. Ich wollte eigentlich gerade testen ob ich jetzt mit Lehrtaste springen kann aber dann kahm dieser Error : Assets\Script\Charackter.cs(24,5): error CS8803: Top-level statements must precede namespace and type declarations.

So sieht mein Code aus : using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Charackter : MonoBehaviour

{

  public float speed = 5.0f;

   

  public Vector3 jump;

  public float jumpForce = 2.0f;

   

  public float jumpHeight = 7f;

  public bool isGrounded;

  private Rigidbody rb;

}

  // Start is called before the first frame update

  void Start()

  {

    speed = 5.0f;

    rb = GetComponent<Rigidbody>();

     

  }

  // Update is called once per frame

  void Update()

  {

    if (Input.GetKey(KeyCode.W))

    {

      transform.Translate(Vector3.forward * Time.deltaTime * speed);

    }

    if (Input.GetKey(KeyCode.S))

    {

      transform.Translate(-1 * Vector3.forward * Time.deltaTime * speed);

    }

    if (Input.GetKey(KeyCode.A))

    {

      transform.Rotate(0, -1, 0);

    }

    if (Input.GetKey(KeyCode.D))

    {

      transform.Rotate(0, 1, 0);

    }

  if (isGrounded)

  {

    if (Input.GetButtonDown("Jump"))

    {

      rb.AddForce(Vector3.up * jumpHeight);

    }

  }

  void OnCollisionEnter(Collision other)

  {

    if (other.gameObject.tag == "Ground")

    {

      isGrounded = true;

    }

  }

  void OnCollisionExit(Collision other)

  {

    if (other.gameObject.tag == "Ground")

    {

      isGrounded = false;

    }

  }

}

  Ich währe sehr Dankbar um Hilfe da ich nicht so viel Ahnung von diesem Thema habe.

Lg

C Sharp, Visual Studio, Unity

Meistgelesene Fragen zum Thema Unity