设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Pygame 第6课】 面向对象的游戏设计

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

21#
发表于 2016-3-14 21:44:50 |只看该作者
mike90326 发表于 2016-3-14 12:55
还是有几点疑问:
1. MOUSEBUTTONDOWN 是一个状态还是一个即时动作呢?从切换图片的那课程来看,应该是一 ...

你加个变量比如叫 pressed,buttondown之后设为true,buttonup再设为false

循环中判断是 pressed 的状态,就定时发射子弹,怎么定时,就看你自己控制了

主循环里只负责创建子弹,至于子弹的飞行、碰撞、销毁,都放子弹类里实现。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

34

积分

新手上路

Rank: 1

22#
发表于 2016-3-15 09:10:20 |只看该作者
crossin先生 发表于 2016-3-14 21:44
你加个变量比如叫 pressed,buttondown之后设为true,buttonup再设为false

循环中判断是 pressed 的状态 ...

感谢!!
回复

使用道具 举报

3

主题

0

好友

41

积分

新手上路

Rank: 1

23#
发表于 2017-2-10 14:47:57 |只看该作者
少了一行代码吧,在创建bullet实例之后,要调用_init_()方法,要不就报错,调用move的时候就没y属性
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

24#
发表于 2017-2-10 21:46:58 |只看该作者
肖明 发表于 2017-2-10 14:47
少了一行代码吧,在创建bullet实例之后,要调用_init_()方法,要不就报错,调用move的时候就没y属性 ...

你这里错了,__init__ 前后是两个下划线,会自动调用。你写错了,但是你手动调用了,歪打正着
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

145

积分

注册会员

Rank: 2

25#
发表于 2017-3-5 18:33:39 |只看该作者
本帖最后由 brahmagupta 于 2017-3-5 18:34 编辑

上节课刚想着用 class来构造子弹。。这节课就讲了!
还有很多要学习
回复

使用道具 举报

1

主题

0

好友

45

积分

新手上路

Rank: 1

26#
发表于 2017-7-31 09:39:56 |只看该作者
本帖最后由 mihchaelli 于 2017-7-31 09:43 编辑

crossin
今天在写这个代码 一个问题:
为什么要 有两个获取位置的方法啊:

class Bullet:
    def __init__(self):
        self.x = 0
        self.y = -1
        self.image = pygame.image.load('bullet.png').convert_alpha()
        
    def move(self):
        if self.y > 0:
            self.y -= 30
        else:   
            self.x = x- self.image.get_width() /2
            self.y = y- self.image.get_height() /2

x,y = pygame.mouse.get_pos()
bullet.move

这样为什么不行啊 因为子弹的发射位置和飞机的位置是一个啊 为什么要单独在类中定义这个方法啊
回复

使用道具 举报

1

主题

0

好友

45

积分

新手上路

Rank: 1

27#
发表于 2017-7-31 09:44:09 |只看该作者
mihchaelli 发表于 2017-7-31 09:39
crossin
今天在写这个代码 一个问题:
为什么要 有两个获取位置的方法啊:

解决了 是可以的

bullet.move() 少了括号
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

28#
发表于 2018-2-23 15:51:15 |只看该作者
  1. import  pygame
  2. from sys import exit

  3. class Bullet():
  4.     def __init__(self):
  5.         self.x=0
  6.         self.y=-1
  7.         self.image=pygame.image.load('bullet.png').convert_alpha()
  8.         self.width=self.image.get_width()/2
  9.         self.height=self.image.get_height()/2

  10.     def move(self):
  11.         if self.y<0:
  12.             mouse_x,mouse_y=pygame.mouse.get_pos()
  13.             self.x=mouse_x-self.width
  14.             self.y=mouse_y-self.height
  15.         else:
  16.             self.y-=5

  17. class Plane():
  18.     def __init__(self):
  19.         self.image=pygame.image.load('plane.png').convert_alpha()
  20.         self.width = self.image.get_width() / 2
  21.         self.height = self.image.get_height() / 2

  22.     def postion(self):
  23.         mouse_x, mouse_y = pygame.mouse.get_pos()
  24.         x = mouse_x - self.width
  25.         y = mouse_y - self.height
  26.         return (x,y)

  27. pygame.init()
  28. screen=pygame.display.set_mode((450,600),0,32)
  29. pygame.display.set_caption('飞机大战')
  30. background=pygame.image.load('back.jpg')
  31. bullet=Bullet()
  32. plane=Plane()

  33. while True:
  34.     for event in pygame.event.get():
  35.         if event.type==pygame.QUIT:
  36.             pygame.quit()
  37.             exit()
  38.     screen.blit(background,(0,0))
  39.     bullet.move()
  40.     plane.postion()
  41.     screen.blit(bullet.image,(bullet.x,bullet.y))
  42.     screen.blit(plane.image,plane.postion())
  43.     pygame.display.update()

复制代码
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

29#
发表于 2018-2-23 15:51:54 |只看该作者
集各家所长,嘿嘿
回复

使用道具 举报

2

主题

0

好友

66

积分

注册会员

Rank: 2

30#
发表于 2018-4-11 10:28:56 |只看该作者
     self.y -= 5,这个5是什么单位,是像素点吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-23 00:37 , Processed in 0.022474 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部