【问题标题】:set mouse cursor position as objects heading将鼠标光标位置设置为对象标题
【发布时间】:2019-12-24 10:50:08
【问题描述】:

我想通过窗口内的鼠标光标位置设置对象u1的标题。

import turtle
import pygame
import time

win = turtle.Screen()#window
win.title("eagle.py")
win.setup(1920,1080)
win.bgcolor("black")
win.bgpic("triangle")


c1 = turtle.Turtle()#cloud1
c1.speed(0)
c1.penup()
c1.setposition(-1075, 256)
c1.color("white")
c1.shape("triangle")
c_speed = 1 #cloudspeed

u1 = turtle.Turtle()#user1
mouse_pos = pygame.mouse.get_pos()
u1.shape("triangle")
u1.color("red")
u1.speed(0)
u1.setposition(0,0)
u1.setheading(mouse_pos)
u1.penup()
u_speed = 10 #playerspeed


def u1_r():
    x = u1.xcor()
    x += u_speed
    u1.setx(x)
def u1_l():
    x = u1.xcor()
    x -= u_speed
    u1.setx(x)
def u1_up():
    y = u1.ycor()
    y += u_speed
    u1.sety(y)
def u1_down():
    y = u1.ycor()
    y -= u_speed
    u1.sety(y)


while True:
    win.update()
    time.sleep(1/160)
    c1.setx(c1.xcor() + c_speed)
    if c1.xcor() > 1075:
        c1.goto(-1075, 256)
    win.listen()
    win.onkeypress(u1_r, "d")
    win.onkeypress(u1_l, "a")
    win.onkeypress(u1_up, "w")
    win.onkeypress(u1_down, "s")

程序运行后立即关闭。我做错了什么?

【问题讨论】:

    标签: python python-3.x pygame mouse turtle-graphics


    【解决方案1】:

    您拥有以下事实:

    win.listen()
    win.onkeypress(u1_r, "d")
    win.onkeypress(u1_l, "a")
    win.onkeypress(u1_up, "w")
    win.onkeypress(u1_down, "s")
    

    在循环中表示您对工作环境没有基本了解。让我们重新开始,折腾 pygametime,只在 turtle 框架内工作:

    from turtle import Screen, Turtle
    
    def player_r():
        player.setheading(0)
        player.setx(player.xcor() + player_speed)
    
    def player_l():
        player.setheading(180)
        player.setx(player.xcor() - player_speed)
    
    def player_up():
        player.setheading(90)
        player.sety(player.ycor() + player_speed)
    
    def player_down():
        player.setheading(270)
        player.sety(player.ycor() - player_speed)
    
    def move():
        cloud.setx(cloud.xcor() + cloud_speed)
    
        if cloud.xcor() > 940:
            cloud.goto(-940, 256)
    
        screen.update()
    
        screen.ontimer(move)
    
    screen = Screen()
    screen.setup(1920, 1080)
    screen.bgcolor('black')
    screen.tracer(False)
    
    cloud = Turtle()
    cloud.shape('circle')
    cloud.shapesize(1, 3)
    cloud.color('white')
    
    cloud.penup()
    cloud.setposition(-940, 256)
    
    cloud_speed = 1
    
    player = Turtle()
    player.shape('turtle')
    player.color('red')
    
    player.penup()
    
    player_speed = 10
    
    screen.onkeypress(player_r, 'd')
    screen.onkeypress(player_l, 'a')
    screen.onkeypress(player_up, 'w')
    screen.onkeypress(player_down, 's')
    screen.listen()
    
    move()
    
    screen.mainloop()
    

    【讨论】:

      【解决方案2】:

      在您的代码中,字符串位于标题中。而是放变量。

      u1 = turtle.Turtle()
      mouse_pos = pygame.mouse.get_pos()
      u1.heading(mouse_pos)  # variable
      

      编辑:这对我有用,三角形移动..

      一开始似乎需要pygame.init()

      u1.setheading 里面有一个数字,而不是元组。这是为了角度。 (man turtle)

      import turtle
      import pygame
      import time
      
      pygame.init()
      
      win = turtle.Screen()#window
      win.title("eagle.py")
      win.setup(1920,1080)
      win.bgcolor("black")
      win.bgpic() # changed
      
      
      c1 = turtle.Turtle()#cloud1
      c1.speed(0)
      c1.penup()
      c1.setposition(-1075, 256)
      c1.color("white")
      c1.shape("triangle")
      c_speed = 1 #cloudspeed
      
      u1 = turtle.Turtle()#user1
      mouse_pos = pygame.mouse.get_pos()
      u1.shape("triangle")
      u1.color("red")
      u1.speed(0)
      u1.setposition(0,0)
      u1.setheading(0)  # to be changed, setheading(int)
      u1.penup()
      u_speed = 10 #playerspeed
      
      
      def u1_r():
          x = u1.xcor()
          x += u_speed
          u1.setx(x)
      def u1_l():
          x = u1.xcor()
          x -= u_speed
          u1.setx(x)
      def u1_up():
          y = u1.ycor()
          y += u_speed
          u1.sety(y)
      def u1_down():
          y = u1.ycor()
          y -= u_speed
          u1.sety(y)
      
      
      while True:
          win.update()
          time.sleep(1/160)
          c1.setx(c1.xcor() + c_speed)
          if c1.xcor() > 1075:
              c1.goto(-1075, 256)
          win.listen()
          win.onkeypress(u1_r, "d")
          win.onkeypress(u1_l, "a")
          win.onkeypress(u1_up, "w")
          win.onkeypress(u1_down, "s")
      

      【讨论】:

      • 我已将其更改为u1 = turtle.Turtle() mouse_pos = pygame.mouse.get_pos() u1.setheading(mouse_pos),但它仍然崩溃
      • 当然,但我知道错误发生在pygame.mouse.get_pos
      • 我做了一些有用的东西并编辑了我的答案。请尝试。
      【解决方案3】:

      turtle.heading() 需要一个数字参数,以度数指定航向。

      我认为您不能同时使用pygameturtle 模块。两者都有自己的绘制图形和获取鼠标当前位置的方式,所以理论上你可以使用任何一种。

      无论您使用的是哪一个,您都需要从鼠标的 x、y 位置计算航向角。

      以下是测量与 x、y 位置原点的角度的方法(假设其 x 值不为零):

      import math
      
      x, y = ... # Mouse position.
      print(math.degrees(math.atan(y/x)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多