2.5D гоночная игра в быстрой или объективной C

Я хотел бы сделать 2.5D гоночную игру с нативными фреймворками на iOS, используя swift или target-C. Кто-нибудь пробовал этот опыт? Любой совет?

Я начал смотреть на этот пример JavaScript https://github.com/jakesgordon/javascript-racer/

У меня что-то работает, но у меня неплохие показатели. Участки дороги нарисованы с использованием SKShapeNode.

Здесь вы можете увидеть код 2 основных функций: drawRoad() и renderPolygon(), вызываемых из renderSegment()

func drawRoad()
    {
        UIGraphicsBeginImageContext(CGSizeMake(widthEcran, heightEcran))
        var ctx = UIGraphicsGetCurrentContext();

        let baseSegment = findSegment(Int(cameraPosition))
        var maximumY = heightEcran // java layer = screen height , sprite or shape = 0
        self.clearRoad()
        renderedPolys                       =   0
        rendrerdSegments                    =   0

        for var i = 0; i < roadProfondeur; i++
        {
            var leSegment = segmentsRoute[ ( baseSegment.index + i) % segmentsRoute.count]

            leSegment.brouillard = brouillardProgressif(i, vProfondeur: roadProfondeur, vDensite: densiteBrouillard);

            projection(&leSegment.p1, cameraX: (CGFloat(joueurX) * roadWidth) , cameraY: cameraHeight, cameraZ: cameraPosition, cameraProfondeur: cameraProfondeurActuelle, vWidth: widthEcran , vHeight: heightEcran , vRoadWidth: roadWidth)
            projection(&leSegment.p2, cameraX: (CGFloat(joueurX) * roadWidth) , cameraY: cameraHeight, cameraZ: cameraPosition, cameraProfondeur: cameraProfondeurActuelle, vWidth: widthEcran , vHeight: heightEcran , vRoadWidth: roadWidth)

            if (leSegment.p1.cameraZ <= cameraProfondeurActuelle) || // segment derrière nous
                (leSegment.p2.screenY <= maximumY) // || ((leSegment.p2.screenY - leSegment.p1.screenY) <= 1)  // déjà rendu
            {
                // on ne fait rien
            }
            else
            {
                // on dessine le segment
                rendrerdSegments = rendrerdSegments + 1
                //NSLog("render segment n° %i : x1=%f y1=%f w1=%f x2=%f y2=%f w2=%f", leSegment.index, leSegment.p1.screenX, leSegment.p1.screenY, leSegment.p1.screenW, leSegment.p2.screenX, leSegment.p2.screenY, leSegment.p2.screenW)

                renderSegment(ctx!, vWidth: widthEcran, vBandes: bandes, x1: leSegment.p1.screenX, y1: leSegment.p1.screenY, w1: leSegment.p1.screenW, x2: leSegment.p2.screenX, y2: leSegment.p2.screenY, w2: leSegment.p2.screenW, vBrouillard: leSegment.brouillard, vCouleur: leSegment.color , vCouleurBordure: leSegment.colorBordure, vCouleurTerrain: leSegment.colorTerrain)
            }
            maximumY = leSegment.p2.screenY
        } // fin for
        // NSLog("rendered seg = %i", rendrerdSegments)
        // NSLog("rendered polys = %i", renderedPolys)

        // textureImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        // route.texture = SKTexture(CGImage: textureImage.CGImage!)

    }



 func renderPolygon(ctx : CGContext, x1:CGFloat, y1:CGFloat, x2:CGFloat, y2:CGFloat, x3:CGFloat, y3:CGFloat, x4:CGFloat, y4:CGFloat, fillColor: SKColor)
    {
        renderedPolys = renderedPolys + 1




        let polygon : SKShapeNode = SKShapeNode(path: renderPolygonPath(x1, y1: y1, x2: x2, y2: y2, x3: x3, y3: y3, x4: x4, y4: y4))
        polygon.antialiased = false
        polygon.strokeColor = fillColor
        polygon.fillColor = fillColor

        route.addChild(polygon)



    }

0 ответов

Другие вопросы по тегам