继承父类方法与直接调用父类方法有什么区别?
来源:3-7 飞机大战项目敌方飞机类的封装
qq_慕娘5109606
2019-06-04 21:51:18
游戏中的效果是一致的。
import random
import pygame, constants
from game.bullute import Bullet
class Plane(pygame.sprite.Sprite):
"""飞机基础类型"""
# 飞机图片
plane_images = []
# 飞机爆炸图片
destroy_images = []
# 坠毁的音乐
down_sound_src = None
# 飞机状态 T or F
active = True
# 飞机发生子弹的子弹精灵组
bullets = pygame.sprite.Group()
# 背景图片
def __init__(self, screen, speed=None):
super().__init__()
# 加载静态资源
self._img_list = []
self._destroy_img_list = []
self.down_sound = None
self.load_src()
# 设置飞机飞行速度
self.speed = speed or 10
# 获取飞机位置
self.screen = screen
self.rect = self._img_list[0].get_rect()
# 获取屏幕大小
self.width, self.height = self.screen.get_size()
# 获我方飞机高度宽度
self.our_plan_width, self.our_plan_hight = self._img_list[0].get_size()
# 改变飞机初始位置
our_plan_width, our_plan_hight = self._img_list[0].get_size()
self.rect.topleft = (int(self.width - our_plan_width) / 2,
int(self.height - our_plan_hight))
def load_src(self):
"""加载静态资源"""
# 飞机图像
for img in self.plane_images:
self._img_list.append(pygame.image.load(img))
# 飞机坠毁的图像
for img in self.destroy_images:
self._destroy_img_list.append(pygame.image.load(img))
# 坠毁音乐
if self.down_sound_src:
self.down_sound = pygame.mixer.Sound(self.down_sound_src)
print(len(self._img_list))
@property
def image(self):
# 设置飞机图片(列表形式)
return self._img_list[0]
def blit_me(self):
# 绘制飞机。
self.screen.blit(self.image, self.rect)
def move_up(self):
self.rect.top -= self.speed
# 设置飞机按键移动效果
def move_down(self):
self.rect.top += self.speed
def move_left(self):
self.rect.left -= self.speed
def move_right(self):
self.rect.left += self.speed
def broken_down(self):
# 播放坠音乐
if self.down_sound:
self.down_sound.play()
# 坠毁图片播放
for img in self._destroy_img_list:
self.screen.blit(img, self.rect)
# 坠毁后状态变成F
self.active = False
def shoot(self):
"""发射子弹"""
bullet = Bullet(self.screen, self, 30)
self.bullets.add(bullet)
class OurPlan(Plane):
"""我方飞机"""
plane_images = constants.OUR_PLAN_IMG_LIST
# 飞机爆炸图片
destroy_images = constants.OUR_PLAN_DESTROY_IMG_LIST
# 坠毁的音乐
down_sound_src = constants.OUR_PLAN_DESTROY_MUSIC
# 超出界面后拉回来
def move_up(self):
super().move_up()
if self.rect.top <= 0:
self.rect.top = 0
def move_down(self):
super().move_down()
if self.rect.bottom >= self.height:
self.rect.bottom = self.height
def move_left(self):
super().move_left()
if self.rect.left <= 0:
self.rect.left = 0
def move_right(self):
super().move_right()
if self.rect.left >= self.width - self.our_plan_width:
self.rect.left = self.width - self.our_plan_width
def move(self, key_down):
"""设置飞机按键盘一直移动"""
if key_down == None:
pass
elif key_down == pygame.K_w or key_down == pygame.K_UP:
self.move_up()
elif key_down == pygame.K_s or key_down == pygame.K_DOWN:
self.move_down()
elif key_down == pygame.K_a or key_down == pygame.K_LEFT:
self.move_left()
elif key_down == pygame.K_d or key_down == pygame.K_RIGHT:
self.move_right()
def update(self, frame, KEY_down):
# self.move(KEY_down) # 设置按一次键盘就一直保持运动
# 设置飞机的动态喷雾效果
if frame % 3 == 0:
self.screen.blit(self._img_list[0], self.rect)
else:
self.screen.blit(self._img_list[-1], self.rect)
def breakdown(self):
# 绘制飞机坠毁图像
self.screen.blit(self._destroy_img_list[0], self.rect)
self.screen.blit(self._destroy_img_list[1], self.rect)
self.screen.blit(self._destroy_img_list[2], self.rect)
self.screen.blit(self._destroy_img_list[3], self.rect)
# 坠毁声音
self.breakdown_sound = pygame.mixer.Sound(self.down_sound_src)
self.breakdown_sound.set_volume(0.4) # 声音大小
self.breakdown_sound.play()
class Enemy_Small_Plan(Plane):
"""敌方小飞机"""
plane_images = constants.ENEMY_SMALL_PLAN_IMG_LIST
# 飞机爆炸图片
destroy_images = constants.ENEMY_SMALL_PLAN_DESTROY_IMG_LIST
# 坠毁的音乐
down_sound_src = constants.ENEMY_SMALL_PLAN_DESTROY_MUSIC
def __init__(self, screen, speed):
super().__init__(screen, speed)
enemy_small_plan_width, enemy_small_plan_hight = self._img_list[0].get_size()
self.enemy_width_X, self.enemy_height_Y = random.randint(0, int(self.width)), \
random.randint(-(int(enemy_small_plan_hight) * 5),
-int(enemy_small_plan_hight))
self.rect.topleft = (self.enemy_width_X, self.enemy_height_Y)
# def load_src(self):
# """加载静态资源"""
# # 飞机图像
# for img in self.plane_images:
# self._img_list.append(pygame.image.load(img))
# # 飞机坠毁的图像
# for img in self.destroy_images:
# self._destroy_img_list.append(pygame.image.load(img))
# # 坠毁音乐
# if self.down_sound_src:
# self.down_sound = pygame.mixer.Sound(self.down_sound_src)
# print(len(self._img_list))
def update(self):
# self.move(KEY_down) # 设置按一次键盘就一直保持运动
# n = 0
# while n <= 6:
# n += 1
# enemy_small_plan_width, enemy_small_plan_hight = self._img_list[0].get_size()
# enemy_width_X, enemy_height_Y = random.randint(0, int(self.width)), \
# random.randint(-(int(enemy_small_plan_hight) * 5), 0)
# self.rect.topleft = (enemy_width_X, enemy_height_Y)
# self.blit_me()
# 当飞机超出屏幕之外,飞机消失
self.blit_me()
self.move_down()
# super().move_down()
if self.rect.top >= self.height:
self.rect.top = self.enemy_height_Y
print(111)
# 设置飞机自动向下移动
# n = 0
# while n <= 6:
# n += 1
# enemy_small_plan_width, enemy_small_plan_hight = self._img_list[0].get_size()
# enemy_width_X, enemy_height_Y = random.randint(0, int(self.width)), \
# random.randint(-(int(enemy_small_plan_hight) * 5), 0)
# self.rect.topleft = (enemy_width_X, enemy_height_Y)
self.screen.blit(self._img_list[0], self.rect)
1回答
同学,你好,这两种方法都是可以的,当子类继承父类之后,会有父类中的属性和方法,可以通过子类的实例去调用该方法。
当子类中要重写父类方法时(与父类方法重名),子类方法的功能包括父类方法功能时,要使用super继承父类方法,不能使用调用。
例:
class Person(object): def __init__(self,name): self.name=name def sayhello(self): print('My name is:',self.name) class Student(Person): def sayhello(self): super().sayhello() # self.sayhello() print('aaa') s = Student('Bill') s.sayhello()
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
相似问题