鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: CD84380973

[已解决]P93 没有报错 为甚我的飞机发生碰撞没反应

[复制链接]
发表于 2020-4-29 17:29:51 | 显示全部楼层
既然都在main文件里面有写me.reset()了,那么仔细看下视频里面编写myplane部分吧,应该是看快了吧,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 17:32:29 | 显示全部楼层
CD84380973 发表于 2020-4-29 13:32
myplane.py

import pygame
def reset(self):
        self.rect.left, self.rect.top = \
                        (self.width - self.rect.width) // 2, \
                        self.height - self.rect.height - 60
其实后面还有要添加的,不过主要是这一段,一旦发生碰撞,那么我方飞机就重置到出生位置,至于后面生命值和结束游戏是之后要写的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 10:29:49 | 显示全部楼层
Hoiste 发表于 2020-4-29 17:32
其实后面还有要添加的,不过主要是这一段,一旦发生碰撞,那么我方飞机就重置到出生位置,至于后面生命 ...

加了这一段,碰撞还是没反应
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 10:54:09 | 显示全部楼层
CD84380973 发表于 2020-4-30 10:29
加了这一段,碰撞还是没反应

main上面那个我方毁灭的代码下面的each.reset()改了吗。另外感觉是你学的时候代码没看全,然后再看下碰撞后IDLE上有没有报错信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 10:55:57 | 显示全部楼层
Hoiste 发表于 2020-4-30 10:54
main上面那个我方毁灭的代码下面的each.reset()改了吗。另外感觉是你学的时候代码没看全,然后再看下碰撞 ...

碰撞后没有报错,我在重新打一遍打飞机的代码来试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 11:06:42 | 显示全部楼层
CD84380973 发表于 2020-4-30 10:55
碰撞后没有报错,我在重新打一遍打飞机的代码来试试

嗯,重写也好,你的代码错漏挺大的,另外刚给的reset方法还漏了一条self.active = True的语句。。如果刚的代码还在的话加上去看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 11:08:03 | 显示全部楼层
Hoiste 发表于 2020-4-30 11:06
嗯,重写也好,你的代码错漏挺大的,另外刚给的reset方法还漏了一条self.active = True的语句。。如果刚 ...

def reset(self):
    self.rect.left, self.rect.top = \
                        (self.width - self.rect.width) // 2, \
                        self.height - self.rect.height - 60
    self.active = True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 11:18:33 | 显示全部楼层

报错了 这是啥意思呢

Traceback (most recent call last):
  File "C:\Users\john\Desktop\python练习\飞机大战\main.py", line 5, in <module>
    import enemy
  File "C:\Users\john\Desktop\python练习\飞机大战\enemy.py", line 15
    self.rect = self.image.get_rect()
       ^
SyntaxError: invalid syntax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 11:21:27 | 显示全部楼层
说明有语法错误,发下完整的enemy.py代码看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 11:23:01 | 显示全部楼层
Hoiste 发表于 2020-4-30 11:21
说明有语法错误,发下完整的enemy.py代码看看

import pygame
from random import *

class SmallEnemy(pygame.sprite.Sprite):
    def __init__(self,bg_size):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load('images/enemy1.png').convert_alpha()
        self.destroy_images = []
        self.destroy_images.extend([\
            pygame.image.load('images/enemy1_down1.png').convert_alpha(),\
            pygame.image.load('images/enemy1_down2.png').convert_alpha(),\
            pygame.image.load('images/enemy1_down3.png').convert_alpha(),\
            pygame.image.load('images/enemy1_down4.png').convert_alpha()\
        self.rect = self.image.get_rect()
        self.width,self.height=bg_size[0],bg_size[1]
        self.speed = 2
        self.active = True
        self.rect.left,self.rect.top = \
                                     randint(0,self.width - self.rect.width),\
                                     randint(-5 * self.height,0)

    def move(self):
        if self.rect.top < self.height:
            self.rect.top += self.speed
        else:
            self.reset()

    def reset(self):
        self.active = True
        self.rect.left,self.rect.top = \
                                     randint(0,self.width - self.rect.width),\
                                     randint(-5 * self.height,0)


class MidEnemy(pygame.sprite.Sprite):
    def __init__(self,bg_size):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load('images/enemy2.png').convert_alpha()
        self.destroy_images = []
        self.destroy_images.extend([\
            pygame.image.load('images/enemy2_down1.png').convert_alpha(),\
            pygame.image.load('images/enemy2_down2.png').convert_alpha(),\
            pygame.image.load('images/enemy2_down3.png').convert_alpha(),\
            pygame.image.load('images/enemy2_down4.png').convert_alpha()\
        self.rect = self.image.get_rect()
        self.width,self.height=bg_size[0],bg_size[1]
        self.speed = 1
        self.active = True
        self.rect.left,self.rect.top = \
                                     randint(0,self.width - self.rect.width),\
                                     randint(-10 * self.height, -self.height)

    def move(self):
        if self.rect.top < self.height:
            self.rect.top += self.speed
        else:
            self.reset()

    def reset(self):
        self.active = True
        self.rect.left,self.rect.top = \
                                     randint(0,self.width - self.rect.width),\
                                     randint(-10 * self.height, -self.height)




class BigEnemy(pygame.sprite.Sprite):
    def __init__(self,bg_size):
        pygame.sprite.Sprite.__init__(self)

        self.image1 = pygame.image.load('images/enemy3_n1.png').convert_alpha()
        self.image2 = pygame.image.load('images/enemy3_n2.png').convert_alpha()
        self.destroy_images = []
        self.destroy_images.extend([\
            pygame.image.load('images/enemy3_down1.png').convert_alpha(),\
            pygame.image.load('images/enemy3_down2.png').convert_alpha(),\
            pygame.image.load('images/enemy3_down3.png').convert_alpha(),\
            pygame.image.load('images/enemy3_down4.png').convert_alpha(),\
            pygame.image.load('images/enemy3_down5.png').convert_alpha(),\
            pygame.image.load('images/enemy3_down6.png').convert_alpha()\
        self.rect = self.image1.get_rect()
        self.width,self.height=bg_size[0],bg_size[1]
        self.speed = 1
        self.active = True
        self.rect.left,self.rect.top = \
                                     randint(0,self.width - self.rect.width),\
                                     randint(-15 * self.height, -5 * self.height)

    def move(self):
        if self.rect.top < self.height:
            self.rect.top += self.speed
        else:
            self.reset()

    def reset(self):
        self.active = True
        self.rect.left,self.rect.top = \
                                     randint(0,self.width - self.rect.width),\
                                     randint(-15 * self.height, -5 * self.height)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 11:32:20 | 显示全部楼层
CD84380973 发表于 2020-4-30 11:23
import pygame
from random import *

上一行那个反斜杠删掉,程序把self.rect和上一行当成同一句了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 11:33:07 | 显示全部楼层
Hoiste 发表于 2020-4-30 11:32
上一行那个反斜杠删掉,程序把self.rect和上一行当成同一句了。


后面几处也一样,把self.rect上一行的反斜杠删掉或者回车一行加上])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 11:43:27 | 显示全部楼层
Hoiste 发表于 2020-4-30 11:33
后面几处也一样,把self.rect上一行的反斜杠删掉或者回车一行加上])

改好啦,没报错了,重写一遍后结果还是碰撞没反应
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 11:48:22 | 显示全部楼层
发现问题了,因为你在main.py里面三个def add_small_enemies(group1, group2, num):方法下面把e1加入到两个组里,你把两个都加到同一个组里面了,也就是把其中一个group1.add(e1)改成group2.add(e1),也就是写成下面这样:
def add_small_enemies(group1, group2, num):
    for i in range(num):
        e1 = enemy.SmallEnemy(bg_size)
        group1.add(e1)
        group2.add(e1)

def add_mid_enemies(group1, group2, num):
    for i in range(num):
        e2 = enemy.MidEnemy(bg_size)
        group1.add(e2)
        group2.add(e2)

def add_big_enemies(group1, group2, num):
    for i in range(num):
        e3 = enemy.BigEnemy(bg_size)
        group1.add(e3)
        group2.add(e3)
这样应该就没问题了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 13:00:31 | 显示全部楼层
Hoiste 发表于 2020-4-30 11:48
发现问题了,因为你在main.py里面三个def add_small_enemies(group1, group2, num):方法下面把e1加入到两个 ...

谢谢谢谢,改了以后报了这个错帮忙看看呢感谢

Traceback (most recent call last):
  File "C:\Users\john\Desktop\python练习\飞机大战\main.py", line 209, in <module>
    main()
  File "C:\Users\john\Desktop\python练习\飞机大战\main.py", line 166, in main
    e1_destory_index = (e1.destroy_index + 1) % 4
NameError: name 'e1' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 13:21:32 | 显示全部楼层    本楼为最佳答案   
CD84380973 发表于 2020-4-30 13:00
谢谢谢谢,改了以后报了这个错帮忙看看呢感谢

Traceback (most recent call last):

你又动了代码吗?我复制了你的代码没问题的。。。改成e1_destory_index = (e1_destroy_index + 1) % 4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 13:25:56 | 显示全部楼层
Hoiste 发表于 2020-4-30 13:21
你又动了代码吗?我复制了你的代码没问题的。。。改成e1_destory_index = (e1_destroy_index + 1) % 4

终于成功了,耗了2天 感谢感谢!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 00:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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