鱼C论坛

 找回密码
 立即注册
查看: 1649|回复: 12

pygame如何让鼠标在窗口内活动

[复制链接]
发表于 2019-12-8 12:13:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想让鼠标仅在窗口内活动

if event.type == MOUSEMOTION:
                                #获取鼠标位置
                                mouse_pos=mouse_x,mouse_y=pygame.mouse.get_pos()
                                #限制鼠标移动
                                if mouse_x>width:
                                       
                                        pygame.mouse.set_pos((width,mouse_y))
                                if mouse_x<0:
                                       
                                        pygame.mouse.set_pos((0,mouse_y))
                                if mouse_y>height:
                                       
                                        pygame.mouse.set_pos((mouse_y,height))
                                if mouse_y<0:
                                       
                                        mouse_y=0
                                        pygame.mouse.set_pos((mouse_x,0))
没有效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-8 12:32:17 | 显示全部楼层
设置窗口全屏。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:33:50 | 显示全部楼层
本帖最后由 peicd 于 2019-12-8 12:44 编辑

pygame 在你鼠标移出窗口后就无法获取鼠标事件了。把你的width和height缩小,轻微移动就可以看到效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 15:59:56 | 显示全部楼层
peicd 发表于 2019-12-8 12:33
pygame 在你鼠标移出窗口后就无法获取鼠标事件了。把你的width和height缩小,轻微移动就可以看到效果。

的确是这个问题,我按你说的设置了,我还做了一个4000*4000的背景,鼠标碰到屏幕边缘时,背景会跟着鼠标移动,希望能做出类似魔兽争霸鼠标碰到屏幕边缘后的效果,但是好卡啊,并且一不小心就会把鼠标移出屏幕。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 16:04:39 | 显示全部楼层
zltzlt 发表于 2019-12-8 12:32
设置窗口全屏。

那不全屏时有没有解决的方法呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 16:05:44 | 显示全部楼层
战斗猫 发表于 2019-12-8 16:04
那不全屏时有没有解决的方法呢?


没有,不过全屏效果更好,楼主为何不试试呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 16:07:41 | 显示全部楼层
#coding=utf-8
import pygame
import sys
import traceback
from pygame.locals import *
import myplane
import bg


#初始化
pygame.init()
pygame.mixer.init()

#背景
bg_size=width,height=1024,768
screen=pygame.display.set_mode(bg_size)
pygame.display.set_caption("游戏")

BLACK=(0,0,0)
GREEN=(0,225,0)
RED=(225,0,0)
WHITE=(225,225,225)

#全屏判定
fullscreen=1
running=True
#主程序
def main():
        global screen
        #中心位置
        cp=[0,0]
        #全屏判定
        fullscreen=1
        #游戏速率
        clock=pygame.time.Clock()
       
       
        while running:
               
                #生成背景
                bg_image=bg.bg(cp)
               
                #生成装甲
                armor=myplane.armor(cp)
               
                #程序退出程序
                for event in pygame.event.get():
                        if event.type==QUIT:
                                pygame.quit()
                                sys.exit()
                               
                        #取消全屏
                        key_pressed=pygame.key.get_pressed()
                        if key_pressed[K_F11]:
                                fullscreen=not fullscreen
                                if fullscreen:
                                        screen=pygame.display.set_mode(bg_size,FULLSCREEN|DOUBLEBUF|HWSURFACE)
                                else:
                                        screen=pygame.display.set_mode(bg_size)
                                       
                        if event.type == MOUSEMOTION:
                                #获取鼠标位置
                                mouse_pos=mouse_x,mouse_y=pygame.mouse.get_pos()
                                #限制鼠标移动
                                if mouse_x>width-100:
                                        cp[0]-=10
                                        pygame.mouse.set_pos((width-100,mouse_y))
                                if mouse_x<100:
                                        cp[0]+=10
                                        pygame.mouse.set_pos((100,mouse_y))
                                if mouse_y>height-100:
                                        cp[1]-=10
                                        pygame.mouse.set_pos((mouse_y,height-100))
                                if mouse_y<100:
                                        cp[1]+=10
                                        mouse_y=0
                                        pygame.mouse.set_pos((mouse_x,100))
                                        print(cp)
                                       
                #绘制背景
                screen.blit(bg_image.image1,bg_image.rect)
                                       
                #绘制我方飞船
                screen.blit(armor.image1,armor.rect)
                               
                #图像刷新
                pygame.display.flip()
               
                clock.tick(30)




#运行游戏
if __name__=="__main__":
        try:
                main()
        except SystemError:
                pass
        except:
                traceback.print_exc()
                pygame.quit()
                input()


我让背景动的方法就是用第30行的那个中心位置cp
让背景图片的中心和cp对齐,
鼠标每次碰到窗口边缘,就改变cp的位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 16:17:03 | 显示全部楼层
zltzlt 发表于 2019-12-8 16:05
没有,不过全屏效果更好,楼主为何不试试呢?

试了,问题的确解决了,但是好卡。
我还做了一个4000*4000的背景,鼠标碰到屏幕边缘时,背景会跟着鼠标移动,希望能做出类似魔兽争霸鼠标碰到屏幕边缘后的效果,然后好卡啊,一顿一顿的,我以为是我帧速率调的太低了,然后把帧速率调到100,还是一顿一顿的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 16:19:12 | 显示全部楼层
zltzlt 发表于 2019-12-8 16:05
没有,不过全屏效果更好,楼主为何不试试呢?

并且我之前设置的按F11全屏的效果也变得很卡,按好几次F11才会切换全屏。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 16:20:34 | 显示全部楼层
战斗猫 发表于 2019-12-8 16:19
并且我之前设置的按F11全屏的效果也变得很卡,按好几次F11才会切换全屏。

代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 16:31:53 | 显示全部楼层

就是这个了。
#coding=utf-8
import pygame
import sys
import traceback
from pygame.locals import *
import myplane
import bg


#初始化
pygame.init()
pygame.mixer.init()

#背景
bg_size=width,height=1024,768
screen=pygame.display.set_mode(bg_size)
pygame.display.set_caption("游戏")

BLACK=(0,0,0)
GREEN=(0,225,0)
RED=(225,0,0)
WHITE=(225,225,225)

#全屏判定
fullscreen=1
running=True
#主程序
def main():
        global screen
        #中心位置
        cp=[0,0]
        #全屏判定
        fullscreen=1
        #游戏速率
        clock=pygame.time.Clock()
       
       
        while running:
               
                #生成背景
                bg_image=bg.bg(cp)
               
                #生成装甲
                armor=myplane.armor(cp)
               
                #程序退出程序
                for event in pygame.event.get():
                        if event.type==QUIT:
                                pygame.quit()
                                sys.exit()
                               
                        #取消全屏
                        key_pressed=pygame.key.get_pressed()
                        if key_pressed[K_F11]:
                                fullscreen=not fullscreen
                                if fullscreen:
                                        screen=pygame.display.set_mode(bg_size,FULLSCREEN|DOUBLEBUF|HWSURFACE)
                                else:
                                        screen=pygame.display.set_mode(bg_size)
                                       
                        if event.type == MOUSEMOTION:
                                #获取鼠标位置
                                mouse_pos=mouse_x,mouse_y=pygame.mouse.get_pos()
                                #限制鼠标移动
                                if mouse_x>=width-100:
                                        cp[0]-=10
                                        pygame.mouse.set_pos((width-100,mouse_y))
                                if mouse_x<=100:
                                        cp[0]+=10
                                        pygame.mouse.set_pos((100,mouse_y))
                                if mouse_y>=height-100:
                                        cp[1]-=10
                                        pygame.mouse.set_pos((mouse_y,height-100))
                                if mouse_y<=100:
                                        cp[1]+=10
                                        mouse_y=0
                                        pygame.mouse.set_pos((mouse_x,100))
                                        print(cp)
                                       
                #绘制背景
                screen.blit(bg_image.image1,bg_image.rect)
                                       
                #绘制我方飞船
                screen.blit(armor.image1,armor.rect)
                               
                #图像刷新
                pygame.display.flip()
               
                clock.tick(100)




#运行游戏
if __name__=="__main__":
        try:
                main()
        except SystemError:
                pass
        except:
                traceback.print_exc()
                pygame.quit()
                input()

我还做了一个4000*4000的背景,鼠标碰到屏幕边缘时,背景会跟着鼠标移动,希望能做出类似魔兽争霸鼠标碰到屏幕边缘后的效果,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 18:20:17 | 显示全部楼层
战斗猫 发表于 2019-12-8 16:31
就是这个了。
#coding=utf-8
import pygame

如何正确地发代码、上传图片和附件?
https://fishc.com.cn/thread-52272-1-1.html
(出处: 鱼C论坛)
新手乐园版块不是指代码新手,是指新进入论坛的人建议先看的版块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-8 19:38:19 | 显示全部楼层
阴阳神万物主 发表于 2019-12-8 18:20
如何正确地发代码、上传图片和附件?
https://fishc.com.cn/thread-52272-1-1.html
(出处: 鱼C论坛)

哦,原来这样,我是代码新手+论坛新手,谢谢指路。
  1. #coding=utf-8
  2. import pygame
  3. import sys
  4. import traceback
  5. from pygame.locals import *
  6. import myplane
  7. import bg


  8. #初始化
  9. pygame.init()
  10. pygame.mixer.init()

  11. #背景
  12. bg_size=width,height=1024,768
  13. screen=pygame.display.set_mode(bg_size)
  14. pygame.display.set_caption("游戏")

  15. BLACK=(0,0,0)
  16. GREEN=(0,225,0)
  17. RED=(225,0,0)
  18. WHITE=(225,225,225)

  19. #全屏判定
  20. fullscreen=1
  21. running=True
  22. #主程序
  23. def main():
  24.         global screen
  25.         #中心位置
  26.         cp=[0,0]
  27.         #全屏判定
  28.         fullscreen=1
  29.         #游戏速率
  30.         clock=pygame.time.Clock()
  31.         
  32.         
  33.         while running:
  34.                
  35.                 #生成背景
  36.                 bg_image=bg.bg(cp)
  37.                
  38.                 #生成装甲
  39.                 armor=myplane.armor(cp)
  40.                
  41.                 #程序退出程序
  42.                 for event in pygame.event.get():
  43.                         if event.type==QUIT:
  44.                                 pygame.quit()
  45.                                 sys.exit()
  46.                                 
  47.                         #取消全屏
  48.                         key_pressed=pygame.key.get_pressed()
  49.                         if key_pressed[K_F11]:
  50.                                 fullscreen=not fullscreen
  51.                                 if fullscreen:
  52.                                         screen=pygame.display.set_mode(bg_size,FULLSCREEN|DOUBLEBUF|HWSURFACE)
  53.                                 else:
  54.                                         screen=pygame.display.set_mode(bg_size)
  55.                                        
  56.                         if event.type == MOUSEMOTION:
  57.                                 #获取鼠标位置
  58.                                 mouse_pos=mouse_x,mouse_y=pygame.mouse.get_pos()
  59.                                 #限制鼠标移动
  60.                                 if mouse_x>=width-100:
  61.                                         cp[0]-=10
  62.                                         pygame.mouse.set_pos((width-100,mouse_y))
  63.                                 if mouse_x<=100:
  64.                                         cp[0]+=10
  65.                                         pygame.mouse.set_pos((100,mouse_y))
  66.                                 if mouse_y>=height-100:
  67.                                         cp[1]-=10
  68.                                         pygame.mouse.set_pos((mouse_y,height-100))
  69.                                 if mouse_y<=100:
  70.                                         cp[1]+=10
  71.                                         mouse_y=0
  72.                                         pygame.mouse.set_pos((mouse_x,100))
  73.                                         print(cp)
  74.                                        
  75.                 #绘制背景
  76.                 screen.blit(bg_image.image1,bg_image.rect)
  77.                                        
  78.                 #绘制我方飞船
  79.                 screen.blit(armor.image1,armor.rect)
  80.                                 
  81.                 #图像刷新
  82.                 pygame.display.flip()
  83.                
  84.                 clock.tick(100)




  85. #运行游戏
  86. if __name__=="__main__":
  87.         try:
  88.                 main()
  89.         except SystemError:
  90.                 pass
  91.         except:
  92.                 traceback.print_exc()
  93.                 pygame.quit()
  94.                 input()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表