zoukankan      html  css  js  c++  java
  • Python实现超级玛丽游戏系列教程02玛丽走跑

    配套视频教程

    配套视频教程

    项目代码

    项目代码

    最终效果

    行走

    constants.py

    STAND = 'standing'
    WALK = 'walk'
    
    SMALL_ACCEL = .2
    SMALL_TURNAROUND = .35
    

    玛丽类构造函数修改如下:

    玛丽类新增及修改

        def update(self, keys):
            self.handle_state(keys)
            self.update_position()
            self.animation()
    
        def update_position(self):
            self.rect.x += self.x_vel
            self.rect.y += self.y_vel
    
        def handle_state(self, keys):
            if self.state == c.STAND:
                self.standing(keys)
            elif self.state == c.WALK:
                self.walking(keys)
    
    
        def animation(self):
            if self.facing_right:
                self.image = self.right_frames[self.frame_index]
            else:
                self.image = self.left_frames[self.frame_index]
    
        def load_from_sheet(self):
            self.right_frames.append(
                self.get_image(178, 32, 12, 16))  # right
            self.right_frames.append(
                self.get_image(80, 32, 15, 16))  # right walking 1
            self.right_frames.append(
                self.get_image(99, 32, 15, 16))  # right walking 2
            self.right_frames.append(
                self.get_image(114, 32, 15, 16))  # right walking 3
            self.right_frames.append(
                self.get_image(144, 32, 16, 16))  # right jump
            self.right_frames.append(
                self.get_image(130, 32, 14, 16))  # right skid
    
            # The left image frames are numbered the same as the right
            # frames but are simply reversed.
    
            for frame in self.right_frames:
                new_image = pg.transform.flip(frame, True, False)
                self.left_frames.append(new_image)
    

    玛丽类新增

       def standing(self, keys):
            self.frame_index = 0
            self.x_vel = 0
            self.y_vel = 0
    
            if keys[pg.K_LEFT]:
                self.facing_right = False
                self.state = c.WALK
            elif keys[pg.K_RIGHT]:
                self.facing_right = True
                self.state = c.WALK
            else:
                self.state = c.STAND
    
        def walking(self, keys):
            if self.frame_index == 0:
                self.frame_index += 1
            else:
                if self.frame_index < 3:
                    self.frame_index += 1
                else:
                    self.frame_index = 1
    
            if keys[pg.K_LEFT]:
                self.facing_right = False
                self.x_accel = c.SMALL_ACCEL
    
                #向左速度是负的,如果没达到最小的负的速度,继续向左
                # 比如 -3 > -4,那就继续减小
                if self.x_vel > (self.max_x_vel * -1):
                    self.x_vel -= self.x_accel
    
            elif keys[pg.K_RIGHT]:
                self.facing_right = True
                self.x_accel = c.SMALL_ACCEL
    
                if self.x_vel < self.max_x_vel:
                    self.x_vel += self.x_accel
    
    

    不抖



    能停

    转身和加速

  • 相关阅读:
    BZOJ2874 训练士兵 主席树
    单纯形 BZOJ3112: [Zjoi2013]防守战线
    珠宝 jewelry 省选模拟
    FWT [BZOJ 4589:Hard Nim]
    后缀自动机SAM BZOJ 2806
    就是要第一个出场的albus 【BZOJ】 线性基
    冲刺第十二十三天
    冲刺第十 十一天
    阅读8.9.10
    冲刺第八九天
  • 原文地址:https://www.cnblogs.com/neuedu/p/14170209.html
Copyright © 2011-2022 走看看