game maker
Gebruikersnaam:
Wachtwoord:
Home Info Forums Help
Welkom, Gast. Alsjeblieft inloggen of registreren.
De activerings e-mail gemist?
Pagina's: [1] 2 3 ... 10

 1 
 Gepost op: Vandaag om 19:46:49 
Gestart door Hinosh - Laatste bericht door Hinosh
Wat je zou kunnen doen is een globale variabel aanmaken die bijhoud of je het level hebt gehaald en een globale variabel die bijhoud welk character je bent. Daarna zorg je dat je ergens een menu maakt waar je je characters selecteert, en als je het level hebt gehaald wat je moest halen, dan veranderd de variabel die bijhoud welk character je bent als je het nieuwe character selecteert. Dan als laatste moet je zorgen dat je aan het begin van een level veranderd in het character opgeslagen in die globale variabel van eerder.
Dankjewel, nu is het spel opzich af, behalve dan nog de laatste levels. waar er ondertussen ook zo'n 50 van zijn

 2 
 Gepost op: Gisteren om 17:14:51 
Gestart door Hinosh - Laatste bericht door Ceymoonie
Wat je zou kunnen doen is een globale variabel aanmaken die bijhoud of je het level hebt gehaald en een globale variabel die bijhoud welk character je bent. Daarna zorg je dat je ergens een menu maakt waar je je characters selecteert, en als je het level hebt gehaald wat je moest halen, dan veranderd de variabel die bijhoud welk character je bent als je het nieuwe character selecteert. Dan als laatste moet je zorgen dat je aan het begin van een level veranderd in het character opgeslagen in die globale variabel van eerder.

 3 
 Gepost op: Gisteren om 16:49:38 
Gestart door ShroomProductions - Laatste bericht door ShroomProductions
lighting_draw_shadows_from_point komt ongeveer rechtstreeks uit dit example
http://www.game-maker.nl/forums/topic,72321.0

De lampen gebruiken dit ook, en zijn een stuk sneller. Ik denk dus niet dat het probleem daar in zit

obj_lighting create:
GML:
draw_set_circle_precision(64);

//define color and alpha for shadows
col_shadow = c_black;
shadow_alpha = 0.5;

//define light parent
lightParent = obj_light_parent

//surfaces
surf_lights = surface_create(room_width, room_height);
surf_stationary = surface_create(room_width, room_height);
surf_final = surface_create(room_width, room_height);

//merge walls
var blocker = obj_lightBlocker;
var overlay = obj_lightBlockOverlay;

with blocker {
    var o = instance_create(x, y, overlay);
    o.w = sprite_width;
    o.h = sprite_height;
};

do {
    var merge = false;
    with overlay {
        with overlay {
            if (x == other.x + other.w) && (y == other.y) && (h == other.h) {
                other.w += w;
                merge = true;
                instance_destroy();
            };
        };
    };
} until (merge == false);

do {
    var merge = false;
    with overlay {
        with overlay {
            if (y == other.y + other.h) && (x == other.x) && (w == other.w) {
                other.h += h;
                merge = true;
                instance_destroy();
            };
        };
    };
} until (merge == false);

//save corner coordinates and delete overlays
blockCount = 0;
blockVert_x = 0;
blockVert_y = 0;
blockVertCorners = 0;

with overlay {
    other.blockVert_x[other.blockCount, 0] = x - 0.5;     other.blockVert_y[other.blockCount, 0] = y - 0.5;
    other.blockVert_x[other.blockCount, 1] = x + w - 0.5; other.blockVert_y[other.blockCount, 1] = y - 0.5;
    other.blockVert_x[other.blockCount, 2] = x + w - 0.5; other.blockVert_y[other.blockCount, 2] = y + h - 0.5;
    other.blockVert_x[other.blockCount, 3] = x - 0.5;     other.blockVert_y[other.blockCount, 3] = y + h - 0.5;
    other.blockVertCorners[other.blockCount] = 4;
    other.blockCount ++;
    instance_destroy();    
};

//update stationary lights surface
event_perform(ev_other, ev_user0); //refresh stationary lights surface

lighting_draw_shadows_from_point:
GML:
///lighting_draw_shadows_from_point(x, y);
with obj_lighting {
    
    var xx = argument0;
    var yy = argument1;
    
    var theta = 0;
    var theta_min = 0;
    var theta_max = 0;
    var x_min = 0;
    var x_max = 0;
    var y_min = 0;
    var y_max = 0;
    var x_center = 0;
    var y_center = 0;
    var theta_center = 0;

    for(var i=0; i<blockCount; i++) {
        //calculate angles from point to vertex
        theta[0] = point_direction(xx, yy, blockVert_x[i, 0], blockVert_y[i, 0]);
        theta_min = theta[0]; x_min = blockVert_x[i, 0]; y_min = blockVert_y[i, 0];
        theta_max = theta[0]; x_max = blockVert_x[i, 0]; y_max = blockVert_y[i, 0];
        
        for(var j=1; j<blockVertCorners[i]; j++) {
            theta[j] = point_direction(xx, yy, blockVert_x[i, j], blockVert_y[i, j]);
            if abs(theta[1] - theta[j]) > 180 {
                theta[j] -= 360;
            };
            if theta[j] < theta_min {
                theta_min = theta[j];
                x_min = blockVert_x[i, j];
                y_min = blockVert_y[i, j];
            };
            if theta[j] > theta_max {
                theta_max = theta[j];
                x_max = blockVert_x[i, j];
                y_max = blockVert_y[i, j];
            };
        };
        
        x_center = blockVert_x[i, 0] + 0.5*(blockVert_x[i, 2] - blockVert_x[i, 0]);
        y_center = blockVert_y[i, 0] + 0.5*(blockVert_y[i, 2] - blockVert_y[i, 0]);
        theta_center = 0.5 * (theta_min + theta_max);  
    
        //draw shadows
        draw_primitive_begin(pr_trianglefan);
            draw_vertex(x_center, y_center);
            draw_vertex(x_min, y_min);
            draw_vertex(xx + lengthdir_x(1500, theta_min), yy + lengthdir_y(1500, theta_min));
            draw_vertex(xx + lengthdir_x(1500, theta_center), yy + lengthdir_y(1500, theta_center));
            draw_vertex(xx + lengthdir_x(1500, theta_max), yy + lengthdir_y(1500, theta_max));
            draw_vertex(x_max, y_max);
        draw_primitive_end();
    };
};

Als ik die regel weghaal scheelt het 2 fps. Als ik surf_range en surf_shadows niet verwijder scheelt het ook iets van 8 fps. Ik haal nu 26 fps in plaats van 16 met de opstelling als op het plaatje uit de beginpost. (ediit: 24 aangezien ik de schaduwen natuurlijk wel moet drawen)

Is het niet mogelijk om met blend modes er voor te zorgen dat het lichte groen dezelfde kleur blijft als ze overlappen (ongeveer de vraag uit een eerder topic) zodat ik niet voor beide kleuren apart al die stappen hoef uit te voeren?

 4 
 Gepost op: Gisteren om 16:15:09 
Gestart door ShroomProductions - Laatste bericht door Flumble
Om te beginnen moet je de surfaces niet continu weggooien.
Maar ik denk dat het zwaarste deel hem in lighting_draw_shadows_from_point zit.

Draait het wel retesnel wanneer je die regel achterwege laat?

 5 
 Gepost op: Gisteren om 16:12:51 
Gestart door Hinosh - Laatste bericht door Hinosh
Hoe maak ik dat ik characters kan ontgrendelen door een level te halen, ik weet al veel van game maker af, maar ik kan geen goede uitleg vinden voor dit subject, kan iemand me daarom alstublieft helpen

 6 
 Gepost op: Gisteren om 16:02:24 
Gestart door Piet Piraat - Laatste bericht door Flumble
Laten we beginnen met de variant views.
Het bestaat uit een tweede view (als je nu geen views in de room gebruikt, moet je er even voor zorgen dat views aan staan en dat de eerste view overeenkomt met de roomgrootte) waarvan de 'view' buiten de room zit maar de 'port' er binnen.

Ik heb als test ervoor gekozen om de tweede view rechts van de room te plaatsen (in een room van 640x480) :

De xport en yport is de plek waar de tekst zichtbaar moet worden en de wview/wport en hview/hport is de grootte van het tekstvak.

Vervolgens teken je op (room_width,0) de tekst. En het scrollen bereik je door view_yview[1] te verhogen en te verlagen. Bijvoorbeeld +50 in het Mouse Wheel Down-event.

Om ervoor te zorgen dat de tekst niet helemaal uit beeld scrollt, moet je een limiet hebben voor de yview: view_yview[1] = clamp(view_yview[1], 0, string_height(<je tekst>)-view_hport[1]);.

 7 
 Gepost op: Gisteren om 13:11:32 
Gestart door Piet Piraat - Laatste bericht door Piet Piraat
Ik wil in mijn game vertellen wat er gebeurt via tekst.
Dat moet allemaal onder elkaar komen te staan dus die tekst wordt te groot voor het scherm.
Hoe kan ik het zo maken dat ik op en neer kan scrollen in die tekst.
Ikzelf heb op het moment geen idee hoe te beginnen.

 8 
 Gepost op: 22 Februari 2017, 21:44:47 
Gestart door ShroomProductions - Laatste bericht door ShroomProductions
Voor mijn stealth spelletje maak ik viewcones, maar het is ontzettend traag als ik er meerdere tegelijk wil drawen. Ik gebruik de methode uit het licht example met merging walls voor de schaduwen, en met belachelijk veel lampen is het supersnel, dus de traagheid komt door de manier waarop ik de viewcones maak

GML:
//UPDATE SURFACES
with obj_enemy {
    if selected {
        //update shadows surface
        if ! surface_exists(surf_shadows) {
            surf_shadows = surface_create(room_width, room_height);
        };
        surface_set_target(surf_shadows);
            draw_clear_alpha(c_black, 0);
            
            //draw shadows
            draw_set_color(c_black);
            lighting_draw_shadows_from_point(x, y);
        surface_reset_target();
  
    
        //OUTER
        //update outer surface
        if ! surface_exists(surf_outer) {
            surf_outer = surface_create(room_width, room_height);
        };
        surface_set_target(surf_outer);
            draw_clear(other.col_outer);
            
            //remove shadows
            draw_set_blend_mode(bm_subtract);
                draw_surface(surf_shadows, 0, 0);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        //update range surface
        if ! surface_exists(surf_range) {
            surf_range = surface_create(room_width, room_height);
        };
        surface_set_target(surf_range);
            draw_clear(c_black);
            
            //cut range circle
            draw_set_blend_mode(bm_subtract);
                draw_set_color(c_black);
                draw_circle(x, y, viewRange_outer, false);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        //cut range circle from outer surface
        surface_set_target(surf_outer);
            draw_set_blend_mode(bm_subtract);
                draw_surface(surf_range, 0, 0);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        //make triangle
        surface_set_target(surf_range);
            draw_clear(c_black);
            
            draw_set_blend_mode(bm_subtract);
                var x1 = x + lengthdir_x(9999, viewDir + viewAngle);
                var x2 = x + lengthdir_x(9999, viewDir - viewAngle);
                var y1 = y + lengthdir_y(9999, viewDir + viewAngle);
                var y2 = y + lengthdir_y(9999, viewDir - viewAngle);
                draw_triangle(x, y, x1, y1, x2, y2,false);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        //cut range triangle from outer surface
        surface_set_target(surf_outer);
            draw_set_blend_mode(bm_subtract);
                draw_surface(surf_range, 0, 0);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        
        //INNER
        //update inner surface
        if ! surface_exists(surf_inner) {
            surf_inner = surface_create(room_width, room_height);
        };
        surface_set_target(surf_inner);
            draw_clear(other.col_inner);
            
            //remove shadows
            draw_set_blend_mode(bm_subtract);
                draw_surface(surf_shadows, 0, 0);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        //shadows can go
        surface_free(surf_shadows);
        
        //update range surface
        surface_set_target(surf_range);
            draw_clear(c_black);
            
            //cut range circle
            draw_set_blend_mode(bm_subtract);
                draw_set_color(c_black);
                draw_circle(x, y, viewRange_inner, false);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        //cut range circle from outer surface
        surface_set_target(surf_inner);
            draw_set_blend_mode(bm_subtract);
                draw_surface(surf_range, 0, 0);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        //make triangle
        surface_set_target(surf_range);
            draw_clear(c_black);
            
            draw_set_blend_mode(bm_subtract);
                var x1 = x + lengthdir_x(9999, viewDir + viewAngle);
                var x2 = x + lengthdir_x(9999, viewDir - viewAngle);
                var y1 = y + lengthdir_y(9999, viewDir + viewAngle);
                var y2 = y + lengthdir_y(9999, viewDir - viewAngle);
                draw_triangle(x, y, x1, y1, x2, y2,false);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        //cut range triangle from inner surface
        surface_set_target(surf_inner);
            draw_set_blend_mode(bm_subtract);
                draw_surface(surf_range, 0, 0);
            draw_set_blend_mode(bm_normal);
        surface_reset_target();
        
        //free range surface
        surface_free(surf_range);
    } else {
        //not selected, free surfaces
        if surface_exists(surf_outer)   {surface_free(surf_outer)};
        if surface_exists(surf_inner)   {surface_free(surf_inner)};
        if surface_exists(surf_shadows) {surface_free(surf_shadows)};  
    };
};

//UPDATE FINAL SURFACE
if ! surface_exists(surf_final) {
    surf_final = surface_create(room_width, room_height);
};
surface_set_target(surf_final);
    draw_clear_alpha(c_black, 0);
    
    //draw all outer cones
    with obj_enemy {
        if selected {
            draw_surface(surf_outer, 0, 0);
            surface_free(surf_outer);
        };
    };
    
    //draw all inner cones
    with obj_enemy {
        if selected {
            draw_surface(surf_inner, 0, 0);
            surface_free(surf_inner);
        };
    };
surface_reset_target();

De reden dat ik voor outer en inner range een aparte surface maak is om ze mooi te laten blenden als er meerdere overlappen. Wat ik eerder deed was gewoon één surface maken in de kleur voor de outer range en daar een cirkel op drawen in de kleur voor de inner range, en vervolgens de schaduwen en gebieden buiten de cone verwijderen, maar dan overlappen ze niet mooi.

dit is wat ik wil bereiken, maar dan sneller. Met een stuk of 20 (bewegende) lampen haal ik nog gewoon 60 fps, en stationaire lampen krijgen gewoon een paar surfaces met een loop zodat ze een beetje kunnen flikkeren zonder dat ze elke step berekend worden.

 9 
 Gepost op: 20 Februari 2017, 16:29:39 
Gestart door Ricklek - Laatste bericht door Flumble
ik ben nog erg nieuw met gamemaker en dus ook met GML.
Welke GML? Rolt ogen Zo'n 5 objecten en 15 acties, geen codeblokken.

 GameMaker 8 start een stuk sneller op, dus daarin heb ik even een voorbeeld in elkaar geflanst: link.

Het bestaat uit een Controller en een BinairCijfer met 4 children (en nog 2 knoppen om het voorbeeld interactief te maken):

De controller heeft 2 variabelen: de doelWaarde die willekeurig gekozen wordt en de binaireWaarde waarin de huidige som van de cijfers is opgeslagen.
Van de onbepaalde cijfers wordt er telkens 1 (de eerstvolgende) BinairActief, zodat je die makkelijk kan omzetten naar een 0 of een 1.

Ik heb de BinairOnbepaald-instances op een specifieke volgorde in de room gezet (rechts naar links in de eerste room, zodat allereerst de rechter instance BinairActief wordt) en voor elke instance in de creation code een variabele positie ingesteld:


Verder spreekt het voorbeeld wel voor zich: kijk vooral goed naar elke D&D-actie en voor welke objecten het wordt uitgevoerd.

 10 
 Gepost op: 20 Februari 2017, 13:48:18 
Gestart door Clickbait - Laatste bericht door ShroomProductions
een grid draw je meestal met een dubbele for loop

GML:
for(var i=0; i<grid_w; i++) {
    for(var(j=0; j<grid_h; j++) {
        //draw nu cell i, j
    };
};

Het is dan het makkelijkst (vind ik) om voor je inventory een 2d array of ds_grid te gebruiken, zodat je niet hoeft uit te rekenen in welk horizontale of verticale rijtje iets moet komen

Pagina's: [1] 2 3 ... 10 >
Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines
www.game-maker.nl © 2003-2017 Nederlandse Game Maker Community