Beispiel #1
0
                    self.prev_click_time = pygame.time.get_ticks()

        # Отлавливаем сбытие "Клик" на нашем объекте
        if event.type == pygame.MOUSEBUTTONDOWN or event.type == pygame.MOUSEBUTTONUP:
            if self.rect.collidepoint(event.pos):
                if self.last_mouse_event == pygame.MOUSEBUTTONDOWN and event.type == pygame.MOUSEBUTTONUP:
                    clickevent = pygame.event.Event(CLICK, pos=event.pos, target = self)
                    pygame.event.post(clickevent)
            self.last_mouse_event = event.type
        elif event.type == pygame.MOUSEMOTION:
            self.last_mouse_event = event.type

    def update(self, dt):
        """
        Обновляем состояние(местоположение, угол поворота и т.п.) объекта
        Этот метод должен вызываться перед отрисовкой каждого кадра
        Как правило, из данного метода вызываются другие методы, которые изменяют нужное состояние объекта
        """
        pass

    def render(self, screen):
        """
        Отрисовываем объект на поверхность screen
        """
        screen.blit(self.image, self.rect)

if __name__ == "__main__":
    main = PyMain(width=800, height=600)
    main.add_render_object(Bar(pos=(50,50), size=(50,50)))
    main.add_render_object(Bar(pos=(120,150), size=(60,60)))
    main.MainLoop(FPS=120)
            acceleration = "катимся"
        elif self.keys_state & mask_up == mask_up:
            acceleration = "газуем"
        elif self.keys_state & mask_down == mask_down:
            acceleration = "тормозим"
        else:
            acceleration = "катимся"

        print(dir, acceleration)

    def change_mask(self, event_key):
        """
        Изменяем маску в зависимости от нажатых/отпущенных клавиш
        :param event_key: событие клавиши
        """
        if event_key.key in self.keys:  # Обрабатываем только нужные клавиши
            if event_key.type == KEYDOWN:
                self.keys_state |= 0b1000 >> self.keys.index(event_key.key)
            if event_key.type == KEYUP:
                self.keys_state ^= 0b1000 >> self.keys.index(event_key.key)

        # Учтите: большинство обычных клавиатур не могут одновременно обрабатывать больше определенного кол-ва
        #         нажатых клавиш (это собенность работы контроллера клавиатуры)
        # Учтите: Маска 0b0010 отбражается на экране как 0b10. мы же не пишем 002, пишем 2
        print(bin(self.keys_state))


if __name__ == "__main__":
    main = PyMain(width=800, height=600)
    main.add_none_render_object(Keys())
    main.MainLoop(FPS=40)
Beispiel #3
0
 def __init__(self, hero, width=640, height=480):
     PyMain.__init__(self, width, height)
     self.hero = hero
Beispiel #4
0
import pygame
import json
import os
from pygame import *
from Classes.PyMain import PyMain
from Classes.Player import Player
from Classes.Camera import Camera

FPS = 30
WIN_WIDTH = 700
WIN_HEIGHT = 600
DISPLAY = (WIN_WIDTH, WIN_HEIGHT)
BACKGROUND_COLOR = (0, 0, 0)

pygame.init()

f = open(os.path.join("Maps", "test_map.json"))
json_map = json.load(f)
f.close()
f = open(os.path.join("Descriptions", "objects.json"))
description = json.load(f)
f.close()

main = PyMain(json_map, description, width=WIN_WIDTH, height=WIN_HEIGHT)

hero = Player(main.start_pos[0], main.start_pos[1])

main.mainloop(hero, fps=FPS)  # Главный цикл
Beispiel #5
0
        if event.type == pygame.MOUSEBUTTONDOWN or event.type == pygame.MOUSEBUTTONUP:
            if self.rect.collidepoint(event.pos):
                if self.last_mouse_event == pygame.MOUSEBUTTONDOWN and event.type == pygame.MOUSEBUTTONUP:
                    clickevent = pygame.event.Event(CLICK,
                                                    pos=event.pos,
                                                    target=self)
                    pygame.event.post(clickevent)
            self.last_mouse_event = event.type
        elif event.type == pygame.MOUSEMOTION:
            self.last_mouse_event = event.type

    def update(self, dt):
        """
        Обновляем состояние(местоположение, угол поворота и т.п.) объекта
        Этот метод должен вызываться перед отрисовкой каждого кадра
        Как правило, из данного метода вызываются другие методы, которые изменяют нужное состояние объекта
        """
        pass

    def render(self, screen):
        """
        Отрисовываем объект на поверхность screen
        """
        screen.blit(self.image, self.rect)


if __name__ == "__main__":
    main = PyMain(width=800, height=600)
    main.add_render_object(Bar(pos=(50, 50), size=(50, 50)))
    main.add_render_object(Bar(pos=(120, 150), size=(60, 60)))
    main.MainLoop(FPS=120)
Beispiel #6
0
                 image_names,
                 path='../Images/Buttons',
                 pos=(0, 0),
                 function=None,
                 text='Simple Button'):
        super().__init__(image_names, path, pos, function, text)
        self.images["clicked"] = load_image(image_names[-1],
                                            path=path,
                                            alpha_channel=True)
        self.clicked = False

    def events(self, event):
        super().event(event)
        if self.status == 'click':
            self.clicked = True
        if self.status == 'normal' and self.clicked:
            self.status = 'clicked'


if __name__ == "__main__":
    main = PyMain(width=800, height=600)
    main.add_render_object(
        OffButton(image_names=('button_on.png', 'button_hover.png',
                               'button_click.png', 'button_off.png'),
                  pos=(50, 50)))
    main.add_render_object(
        Button(image_names=('button_on.png', 'button_hover.png',
                            'button_click.png'),
               pos=(350, 50)))
    main.MainLoop(FPS=120)
            self.set_num(self.num - 1)
        elif rect_right.collidepoint(xy):
            self.set_num(self.num + 1)
        else:
            return False

    def num_scroll(self):
        """
        Метод переводящий, цифру положения ползунка в текст, для рендера
        """
        if self.max_num != 0:  # если максимальное значение ползунка не равно 0 (чтобы не было деления на ноль)
            self.num_text = Text(self.num, self.x_scroll + 19, self.y + 25)  # и получившееся значение в текст
        else:
            self.num = str(self.min_num)
            self.num_text = Text(str(self.num), self.x_scroll + 19, self.y + 25)
        change_scroll = pygame.event.Event(CHANGE_SCROLL, num=self.num, sender=self)
        pygame.event.post(change_scroll)

    def get_num(self):
        return self.num

    def update(self, dt):
        pass


if __name__ == "__main__":
    main = PyMain()
    scroll = ScrollBar(50, 50, max_num=50, text="Demo Scrolling")
    btn = Button()
    main.add_render_object(scroll)
    main.MainLoop()
    def render(self, screen):
        screen.blit(self.images[self.status], self.rect)
        # смещение текста на центр картинки кнопки
        rect_text_x = self.rect.x + self.rect.w / 2 - self.text.get_rect().w / 2
        rect_text_y = self.rect.y + self.rect.h / 2 - self.text.get_rect().h / 2
        screen.blit(self.text, (rect_text_x, rect_text_y))


# Расширенный класс кнопки, с "потухшим" состоянием после клика п ней.
class OffButton(Button):
    def __init__(self, image_names, path='../Images/Buttons', pos=(0, 0), function=None, text='Simple Button'):
        super().__init__(image_names, path, pos, function, text)
        self.images["clicked"] = load_image(image_names[-1], path=path, alpha_channel=True)
        self.clicked = False

    def events(self, event):
        super().event(event)
        if self.status == 'click':
            self.clicked = True
        if self.status == 'normal' and self.clicked:
            self.status = 'clicked'


if __name__ == "__main__":
    main = PyMain(width=800, height=600)
    main.add_render_object(
        OffButton(image_names=('button_on.png', 'button_hover.png', 'button_click.png', 'button_off.png'),
                  pos=(50, 50)))
    main.add_render_object(Button(image_names=('button_on.png', 'button_hover.png', 'button_click.png'), pos=(350, 50)))
    main.MainLoop(FPS=120)
 def __init__(self, hero, width=640, height=480):
     PyMain.__init__(self, width, height)
     self.hero = hero
Beispiel #10
0
    def render(self, screen):
        angle_of_rotate = math.degrees(math.acos(self.speed.normalize().x))
        #print(angle_of_rotate)

        if self.speed.y>0:
            angle_of_rotate = 360-angle_of_rotate

        rotated_img = pygame.transform.rotate(self.image, angle_of_rotate)
        rect_img = rotated_img.get_rect()
        rect_img.center = self.coords.as_point()  # центр картинки приравниваем вектору позиции
        screen.blit(rotated_img, rect_img) # блитуем все на скрин
        Game_Object.render(self, screen)


if __name__ == "__main__":
    from Classes.PyMain import PyMain
    mainWindow = PyMain(800,600)
    #vector = Game_Object((200,120),(30,0))
    car = Car((300,150),(30,0))
    trace = OutPutWindow((10,10))

    #mainWindow.add_render_object(vector)
    mainWindow.add_render_object(trace)
    mainWindow.add_render_object(car)

    #trace.add_attr(vector, "speed")
    #trace.add_attr(vector, "len_speed")
    #trace.add_attr(vector, "acsel",)
    #trace.add_attr(vector, "len_acsel")
    mainWindow.MainLoop()
Beispiel #11
0
            return False

    def num_scroll(self):
        """
        Метод переводящий, цифру положения ползунка в текст, для рендера
        """
        if self.max_num != 0:  # если максимальное значение ползунка не равно 0 (чтобы не было деления на ноль)
            self.num_text = Text(self.num, self.x_scroll + 19, self.y +
                                 25)  # и получившееся значение в текст
        else:
            self.num = str(self.min_num)
            self.num_text = Text(str(self.num), self.x_scroll + 19,
                                 self.y + 25)
        change_scroll = pygame.event.Event(CHANGE_SCROLL,
                                           num=self.num,
                                           sender=self)
        pygame.event.post(change_scroll)

    def get_num(self):
        return self.num

    def update(self, dt):
        pass


if __name__ == "__main__":
    main = PyMain()
    scroll = ScrollBar(50, 50, max_num=50, text="Demo Scrolling")
    btn = Button()
    main.add_render_object(scroll)
    main.MainLoop()
Beispiel #12
0
import pygame
from pygame import *
from Utilities.load_image import load_image
from Classes.PyMain import PyMain
from Classes.Player import Player
from Classes.StaticObject import StaticObject

FPS = 30
WIN_WIDTH = 700
WIN_HEIGHT = 600
DISPLAY = (WIN_WIDTH, WIN_HEIGHT)
BACKGROUND_COLOR = (0, 0, 0)
HERO_POSITION_X = 300
HERO_POSITION_Y = 300

pygame.init()
main = PyMain(width=WIN_WIDTH, height=WIN_HEIGHT)

hero = Player(HERO_POSITION_X, HERO_POSITION_Y)
locker = StaticObject(200, 200, 'lockerx2.png', height=24)

main.add_render_object({"object": locker, "fucntion": None})

main.mainloop(hero, fps=FPS)  # Главный цикл