, если вы используете Android Studio в MAC OS X, вы можете выполнить следующую команду в своем приложении терминала:
echo 'alias adb="/Applications/Android\ Studio.app/sdk/platform-tools/adb"' >> .bashrc
exec $SHELL
и следующее:
adb devices
, и вы должен показывать список с вашими устройствами Android, подключенными через USB-кабель в вашем MAC, например, примерно так:
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
deb7bed5 device
Если вы используете класс pygame Rect для представления границ вашего объекта, вы можете определить, сталкиваются ли два с помощью функции Rect.colliderect. Например:
import pygame
a = pygame.Rect((1, 1), (2, 2))
b = pygame.Rect((0, 0), (2, 2))
c = pygame.Rect((0, 0), (1, 1))
a.colliderect(b)
# 1
a.colliderect(c)
# 0
b.colliderect(c)
# 1
a сталкивается с b, а b сталкивается с c, но a не сталкивается с c. Обратите внимание, что прямоугольники, которые разделяют границу, не сталкиваются.
Pygame также поддерживает возможность использования Rect в качестве позиции для изображения, когда вы хотите «разбить» его на экране.
Существует множество способов обнаружения столкновений в Pygame. Методы Rect (@Darthfett) и spritecollide являются более популярными, но есть 2 других, которые вы можете использовать:
Метод 1:
Этот метод действительно прост в программировании, но увеличивает небрежность кодирования, имеет множество ограничений и, как правило, не самый лучший способ использования.
Что вы делаете, это выбрать определенный цвет, проверить цвета пикселей вокруг объекта и заставить его столкнуться, если вы обнаружите определенный цвет. Это позволяет использовать простые игры, такие как «Не позволяйте своей мыши касаться цвета черного» и другие простые программы.
Этот метод, безусловно, мой любимый, и Я использую это в 90% всех моих программ. Вы обнаруживаете столкновение с помощью вычисления . Здесь вы берете координаты объектов 1 и 2, смотрите, насколько они близки друг к другу, и из-за этого возникают столкновения. Этот метод допускает большую гибкость при столкновениях, не слишком неряшлив, если все сделано правильно, и довольно просто. Это может занять немного времени, и вам нужно будет тестировать программу много раз, но результаты ее стоит того. Этот метод также позволяет обнаруживать между невидимыми объектами и позволяет легко регулировать коллизионные поля, например. если есть волшебник или что-то еще, и вы умираете, когда вы на некоторое расстояние от него. Этот метод действительно не так популярен, как должен, но я заверяю вас, что он работает. Две самые простые формы столкновения с этим методом - с круговыми и с прямоугольным столкновением.
Допустим, у вас есть класс игрока, который выглядит примерно так, мне нравится использовать pygame.sprite.collide_rect (), в этом случае у нас также будет класс стены.
class Player(pygame.sprite.Sprite):
def __init__(self,x,y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((32,32))
self.rect = Rect(x, y, 32, 32)
def move(self, px, py):
if px != 0:
self.move_on_axis(px, 0)
if py != 0:
self.move_on_axis(0, py)
def move_on_axis(self, px, py):
self.rect.x += px
self.rect.y += py
Здесь мы щекочаем за столкновения с чем-либо в группе стен, которые мы добавляем, когда когда-либо создаем новую стену.
for wall in walls:
if pygame.sprite.collide_rect(self, wall):
if px > 0:
self.rect.right = wall.rect.left
if px < 0:
self.rect.left = wall.rect.right
if py > 0:
self.rect.bottom = wall.rect.top
if py < 0:
self.rect.top = wall.rect.bottom
class Wall(pygame.sprite.Sprite):
def __init__(self, wx):
super().__init__()
all_Sprite_List.add(self)
walls.add(self)
self.image = pygame.Surface((32,32))
self.rect = Rect(wx[0], wx[1], 32, 32)
import pygame
pygame.init()
class Sprite(pygame.sprite.Sprite):
def __init__(self, image, location):
self.image = pygame.image.load(urimage)
...
, затем создайте группы столкновений и используйте pygame.sprite.spritecollide()
Да, но обязательно используйте классы спрайтов для прямоугольников, sprite info, доступных здесь. Итак, для каждого спрайта сделайте rect:
class object(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.x = 0
self.y = 0
self.image = pygame.image.load('object.png')
self.rect = pygame.Rect(self.x,self.y,32,32) #The rect for collision detection.
Я это знаю похоже, много, и вот что я подумал, когда начал с спрайтов, но поверьте мне, это того стоит.
Создайте функцию, которая проверяет периметры x, y, w, h обоих объектов и создает оператор if как таковой, который будет проверять, сталкиваются ли эти два объекта:
def col_check(x,y,w,h,x2,y2,w2,h2):
if (x < (x2 + w2) and (x + w) > x2 and y < (y2 + h2) and (h + y) > y2):
# Do something here
Теперь вы может просто вызвать функцию с периметрами объектов в качестве аргументов.