예제 #1
0
    def __init__(self, qPointList, bot, rType):  #

        QGraphicsItemGroup.__init__(self)
        self.rType = rType

        #射线类型雷达
        if rType == "poly":
            self.item = QGraphicsPolygonItem()  #提供一个多边形item
            self.polygon = QPolygonF(qPointList)
            self.item.setPolygon(self.polygon)
            self.robot = bot

        #范围类型雷达
        elif rType == "round":
            self.item = QGraphicsEllipseItem()  #提供一个椭圆item
            self.item.setRect(qPointList[0], qPointList[1], qPointList[2],
                              qPointList[3])
            self.robot = bot

        color = QColor(255, 100, 6, 10)  #设置雷达的颜色,
        brush = QBrush(color)
        pen = QPen(color)
        self.item.setBrush(brush)
        self.item.setPen(pen)
        self.addToGroup(self.item)
예제 #2
0
 def __init__(self, parent=None):
     QGraphicsItemGroup.__init__(self)
     self.setFlags(QGraphicsItem.ItemIsSelectable)
     self.parent = parent
     TreeItem.scene.addItem(self)
     self.aItem = None
     self.lineCache = []
     self.children = []
     # cached draw params
     self.x = 0
     self.y = 0
     self.nextDown = False
예제 #3
0
파일: robot.py 프로젝트: ZxxWs/RoboCode
    def __init__(self, mapSize, parent, repr):
        QGraphicsItemGroup.__init__(self)

        # 公有属性
        self.gamePlace = 1

        # 私有属性
        self.__mapSize = mapSize
        self.__parent = parent
        self.__health = 100
        self.__repr = repr

        self.__gunLock = "free"
        self.__radarLock = "Free"  # 字面意思是雷达锁

        # 两个动画对象、一个physics对象
        self.__runAnimation = animation("run")
        self.__targetAnimation = animation("target")
        self.__physics = physics(self.__runAnimation)  # 一个physics对象

        # 设置一些颜色
        self.maskColor = QColor(0, 255, 255)
        self.gunMaskColor = QColor(0, 255, 255)  # 炮膛颜色
        self.radarMaskColor = QColor(0, 255, 255)  # 雷达颜色

        # 加载车身图片
        self.__base = QGraphicsPixmapItem()
        self.__base.pixmap = QPixmap(os.getcwd() + "/robotImages/baseGrey.png")
        self.__base.setPixmap(self.__base.pixmap)
        self.addToGroup(self.__base)
        self.__baseWidth = self.__base.boundingRect().width()
        self.__baseHeight = self.__base.boundingRect().height()

        # 加载炮膛图片
        self.__gun = QGraphicsPixmapItem()
        self.__gun.pixmap = QPixmap(os.getcwd() + "/robotImages/gunGrey.png")
        self.__gun.setPixmap(self.__gun.pixmap)
        self.addToGroup(self.__gun)
        self.__gunWidth = self.__gun.boundingRect().width()
        self.__gunHeight = self.__gun.boundingRect().height()

        # 炮膛位置
        x = self.__base.boundingRect().center().x()
        y = self.__base.boundingRect().center().y()
        self.__gun.setPos(x - self.__gunWidth / 2.0,
                          y - self.__gunHeight / 2.0)

        # --------------------------雷达初始化-----------------------------

        # 加载雷达图片
        self.__radar = QGraphicsPixmapItem()
        self.__radar.pixmap = QPixmap(os.getcwd() + "/robotImages/radar.png")
        self.__radar.setPixmap(self.__radar.pixmap)
        self.addToGroup(self.__radar)
        self.__radarWidth = self.__radar.boundingRect().width()
        self.__radarHeight = self.__radar.boundingRect().height()
        # radar position
        self.__radar.setPos(x - self.__radarWidth / 2.0,
                            y - self.__radarHeight / 2.0)

        # 加载雷达范围
        firstPoint = QPointF(x - self.__radarWidth / 2, y)
        secondPoint = QPointF(x + self.__radarWidth / 2, y)
        thirdPoint = QPointF(x + 4 * self.__radarWidth, y + 700)
        fourthPoint = QPointF(x - 4 * self.__radarWidth, y + 700)
        qPointListe = []
        qPointListe.append(firstPoint)
        qPointListe.append(secondPoint)
        qPointListe.append(thirdPoint)
        qPointListe.append(fourthPoint)
        self.__radarField = radarField(qPointListe, self, "poly")

        # 大雷达范围
        qPointListe.remove(fourthPoint)
        qPointListe.remove(thirdPoint)
        thirdPoint = QPointF(x + 10 * self.__radarWidth, y + 400)
        fourthPoint = QPointF(x - 10 * self.__radarWidth, y + 400)
        qPointListe.append(thirdPoint)
        qPointListe.append(fourthPoint)
        self.__largeRadarField = radarField(qPointListe, self, "poly")

        # 细雷达范围
        qPointListe.remove(fourthPoint)
        qPointListe.remove(thirdPoint)
        thirdPoint = QPointF(x + 0.4 * self.__radarWidth, y + 900)
        fourthPoint = QPointF(x - 0.4 * self.__radarWidth, y + 900)
        qPointListe.append(thirdPoint)
        qPointListe.append(fourthPoint)
        self.__thinRadarField = radarField(qPointListe, self, "poly")

        # 弧形雷达范围
        self.__roundRadarField = radarField([0, 0, 300, 300], self, "round")
        self.addToGroup(self.__roundRadarField)
        self.__roundRadarField.setPos(
            x - self.__roundRadarField.boundingRect().width() / 2.0,
            y - self.__roundRadarField.boundingRect().height() / 2.0)

        # add to group
        self.addToGroup(self.__radarField)
        self.addToGroup(self.__largeRadarField)
        self.addToGroup(self.__thinRadarField)

        # 一个坦克上有三个雷达范围,但初始化的时候都是隐藏的
        self.__largeRadarField.hide()
        self.__thinRadarField.hide()
        self.__roundRadarField.hide()
        # --------------------------雷达初始化(上-----------------------------

        # 设置坦克颜色:RGB
        self.setColor(0, 200, 100)
        self.setGunColor(0, 200, 100)
        self.setRadarColor(0, 200, 100)
        self.setBulletsColor(0, 200, 100)

        # 设置原点:
        # 雷达范围
        self.__radarField.setTransformOriginPoint(x, y)
        self.__largeRadarField.setTransformOriginPoint(x, y)
        self.__thinRadarField.setTransformOriginPoint(x, y)
        # 车身
        x = self.__baseWidth / 2
        y = self.__baseHeight / 2
        self.__base.setTransformOriginPoint(x, y)
        # 炮膛
        x = self.__gunWidth / 2
        y = self.__gunHeight / 2
        self.__gun.setTransformOriginPoint(x, y)
        # 雷达(雷达与雷达范围不是一个东西
        x = self.__radarWidth / 2
        y = self.__radarHeight / 2
        self.__radar.setTransformOriginPoint(x, y)

        # 添加self.item到items中以防冲突
        self.__items = set([
            self, self.__base, self.__gun, self.__radar, self.__radarField,
            self.__largeRadarField, self.__thinRadarField,
            self.__roundRadarField
        ])

        # 初始化基类(初始化子类中的初始化函数
        self.init()

        # 当前动画
        self.__currentAnimation = []